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


<script type="text/JavaScript"> alimama_pid="mm_10809884_1047205_2744758"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000"; alimama_bottomcolor="FFFFFF"; alimama_anglesize="4"; alimama_bgpic="2"; alimama_icon="1"; alimama_sizecode="16"; alimama_width=658; alimama_height=60; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>

<script type="text/JavaScript"> alimama_pid="mm_10809884_1047205_2744795"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000"; alimama_bottomcolor="FFFFFF"; alimama_anglesize="4"; alimama_bgpic="2"; alimama_icon="1"; alimama_sizecode="16"; alimama_width=658; alimama_height=60; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>

导读:
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  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文档例子中发现它们。

  

  

  



   Ayn Rand

   0525934189

  

  



   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/book[1]

  这个表达式返回第一个book元素:

  



   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
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
QQ书签 新浪ViVi 365Key网摘 天极网摘 spurl 百度收藏 Google书签 diglog Del.icio.us digg 雅虎收藏 收藏到〖就喜欢〗网络收藏夹
<script type="text/JavaScript"> alimama_pid="mm_10809884_1047205_2744946"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000"; alimama_bottomcolor="FFFFFF"; alimama_anglesize="8"; alimama_bgpic="0"; alimama_icon="0"; alimama_sizecode="16"; alimama_width=658; alimama_height=60; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值