现在的位置: 首页 > 综合 > 正文

使用XPath查找XML文档中的信息

2014年11月21日 ⁄ 综合 ⁄ 共 3549字 ⁄ 字号 评论关闭



导读:

  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文档例子中发现它们。

  

  

  

  Graham Greene

  0140185399

  

  

  在此文档中根结点是books;book是一个拥有type属性的元素,正文在整个XML文档中都存在。那麽你如何能很容易的查找所需要的单个数据片呢?XPath正是你所要的答案。

  查找你有需要的信息

  你在XML文档中使用位置路径表达式来查找信息,这些表达式有很多种组成方式。

  结点元素的查找是你将要碰到的最频繁的查找方式。在上面这个XML文档例子中,根books包含book, title, and author等结点。你可以使用路径来查找这些结点,用正斜杠(/)来分隔子结点,返回所有与模式相匹配的元素。下面的XPath语句返回所有的book元素:

  //books/book

  双正斜杠(//)表示返回XML文档中的所有符合查找准则的元素,而忽略文档中元素的位置级别。你能用下面的表达式很容易的检索到所有的ISBN元素。

  /books/book/isbn

  前面的代码从例子文档中返回如下的元素:

  

  

  0525934189

  

  

  0140185399

  

  

  使用方括号能进一步的加强查找的准确性,这种查找方式需要在方括号中标明子结点或特定的值,XPATH将返回所有与方括号中的子结点或值相匹配的元素。下面的表达式返回所有标题为Atlas Shrugged的book元素。

  /books/book[title=”Atlas Shrugged”]

  你也可以使用带author的方括号来返回所有的books元素,如下表达式:

  /books/book[author]

  方括号符号让你使用属性作为查找准则。符号@使得属性的使用更容易。下面的表达式查找所有的硬封面的书(也就是所有type属性值为hardback的书)

  //book[@type=”hardback”]

  它从例子文档中返回下面的元素:

  

  Ayn Rand

  0525934189

  

  通过位置、名字或者属性来标识元素是一种很好的方式。但是在有些情况下可能需要返回所有的元素。有什麽办法吗可以做到吗?谢天谢地!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



QQ书签

新浪ViVi

365Key网摘

天极网摘

spurl

百度收藏

Google书签

diglog

Del.icio.us

digg

雅虎收藏

Windows Live网摘

收藏到〖就喜欢〗网络收藏夹

抱歉!评论已关闭.