导读:
XML是一种优秀的数据打包和数据交换的形式,分析和转换XML文档是很平常的事情,但是我们该如何在XML文档中查找指定的信息呢?XPath给了我们一个很好的答案。XPath是为查找XML文档中的单个信息而定义的一套语法规则的集合。如果你熟悉XSLT,你可能已经使用过XPath了,只是你还没有意识到而已。
XPath是一种工业标准
XPath是一种由World Wide Web Consortium(W3C)开发的工业标准。它不仅在XSLT标准中得到运用,同时也在XPointer标准中得到了运用。基于XML的数据库也使用它来查找信息。
XPath遵循文档对象模型(DOM)的路径格式,由于每个XML文档都可以看成是一棵拥有许多结点的树,每个结点可以是以下七个类型之一:根(root)、元素(element)、属性(attribute)、正文(text)、命名空间(namespace)、处理指令(processing instruction)和注释(comment)。这些都符合XML文档的规范,你能在以下的XML文档例子中发现它们。
在此文档中根结点是books;book是一个拥有type属性的元素,正文在整个XML文档中都存在。那麽你如何能很容易的查找所需要的单个数据片呢?XPath正是你所要的答案。
查找你有需要的信息
你在XML文档中使用位置路径表达式来查找信息,这些表达式有很多种组成方式。
结点元素的查找是你将要碰到的最频繁的查找方式。在上面这个XML文档例子中,根books包含book, title, and author等结点。你可以使用路径来查找这些结点,用正斜杠(/)来分隔子结点,返回所有与模式相匹配的元素。下面的XPath语句返回所有的book元素:
//books/book
双正斜杠(//)表示返回XML文档中的所有符合查找准则的元素,而忽略文档中元素的位置级别。你能用下面的表达式很容易的检索到所有的ISBN元素。
/books/book/isbn
前面的代码从例子文档中返回如下的元素:
使用方括号能进一步的加强查找的准确性,这种查找方式需要在方括号中标明子结点或特定的值,XPATH将返回所有与方括号中的子结点或值相匹配的元素。下面的表达式返回所有标题为Atlas Shrugged的book元素。
/books/book[title=”Atlas Shrugged”]
你也可以使用带author的方括号来返回所有的books元素,如下表达式:
/books/book[author]
方括号符号让你使用属性作为查找准则。符号@使得属性的使用更容易。下面的表达式查找所有的硬封面的书(也就是所有type属性值为hardback的书)
//book[@type=”hardback”]
它从例子文档中返回下面的元素:
通过位置、名字或者属性来标识元素是一种很好的方式。但是在有些情况下可能需要返回所有的元素。有什麽办法吗可以做到吗?谢天谢地!XPath规范支持用通配符来检索任何信息。用通配符(*)可以很容易的检索到在根结点下的所有元素。下面的例子返回所有的book元素。
/books/*
你能很容易的使用逻辑操作来连接查找表达式,这样你可以得到各种查找表达式返回元素的联接。下面的语句检索所有属性type值为hardcover或softcover的book元素。
//books/book[@type=”hardcover”] | //books/book[@type=”softcover”]
符号(|)与逻辑OR操作符相同。从XML文档中选择单个的结点是一种强有力的查找方式,但是开发者必须小心谨慎的构造查找结点的路径。另外,XPath提供了逻辑OR和AND的功能,可以用它们来操纵查找返回的结果集。也可以利用等式操作符<=,<, >, >=, ==,和 !=。双等号(==)用来比较等同性;反之,感叹号加上等号(!=)用来比较不等。
参考点
语句的第一个字符决定参考点,以正斜杠(/)开始的语句被看作查询时将使用绝对路径。没有正斜杠将导致使用相对路径来查找。上面的例子中我已经使用过绝对路径了,下面是一个使用相对路径的例子:
book/*
上面的语句在当前的参考点下开始查找。它可能出现在一个语句组中,所以前面的语句留下的参考点被该语句使用。同时要记住双正斜杠(//)将检索所有匹配的元素,而忽视文档的参考点位置。
当前结点和父结点
XPath使用圆点来选择当前结点和父结点。这同文件目录列表中的情况相似,使用单个圆点(.)表示当前目录,(..)表示父目录。在XPath中,单个圆点表示选择当前结点,双圆点表示选择父结点。所以如果你要检索当前结点的父结点的所有子结点,可以使用下面语句:
../*
例如,你能用下面的XPath表达式来访问在例子文档中的所有book元素:
/books/book/..
进一步学习XPath
上面我所提到的一些概念只是对XPath的一个概要介绍,你能在XSLT文档和Xpointer中将它们联结起来使用。XPath通过内置函数提供了强大的功能并提供了如何使用它们的语法。了解更详细的信息请查阅XPath specification。
发表于: 2006-10-20,修改于: 2006-10-23 15:51 已浏览793次,有评论0条推荐投诉
本文转自
http://blog.chinaunix.net/u/884/showart_187752.html