
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。
目录 |
最常见的XPath表达式是路径表达式(XPath这一名称的另一来源)。路径表达式是从一个XML节点(当前的上下文节点)到另一个节点、或一组节点的书面步骤顺序。这些步骤以“/”字符分开,每一步有三个构成成分:
一般情况下,我们使用简写后的语法。虽然完整的轴描述是一种更加贴近人类语言,利用自然语言的单词和语法来书写的描述方式,但是相比之下也更加罗嗦。
最简单的XPath如下:
/A/B/C在这里选择所有符合规矩的C节点:C节点必须是B的子节点(B/C),同时B节点必须是A的子节点(A/B),而A是这个XML文档的根节点(/A)。此时的这种描述法类似于磁盘中文件的路径(URI),从盘符开始顺着一级一级的目录最终找到文件。
这里还有一个复杂一些的例子,包含了全部构成成分:
A//B/*[1]此时选择的元素是:在B节点下的第一个节点(B/*[1]),不论节点的名称如何(*);而B节点必须出现在A节点内,不论和A节点之间相隔几层节点(//B);与此同时A节点还必须是当前节点的子节点(A,前边没有/)。
在未缩写语法里,两个上述范例可以写为:
/child::A/child::B/child::Cchild::A/descendant-or-self::B/child::node()[1]在XPath的每个步骤里,通过完整的轴描述(例如:child或descendant-or-self)进行明确的指定,然后使用::,它的后面跟着节点测试的内容,例如上面范例所示的A以及node()。
轴描述元表示XML文件分支树表达式的浏览方向。这些座标──以全名然后缩写语法──列举如下:
@//.. 例如:点点. 例如:点关于使用attribute座标简写语法的一个范例, //a/@href 在文件树里任何地方的元素下选择了一个叫href的属性。self座标最通常与述语同用,以参考现行选定节点。例如,h3[.='See also']在现行上下文选取了叫h3的元素,该元素文字内容是See also。
如果需要了解更多,请查看ZVON.org 给出的 XPath 帮助
节点测试包括特定节点名或者更一般的表达式。至于XML里命名空间字首gs已定义的文件,//gs:enquiry将找到所有在那命名空间里enquiry的节点。
其他节点格式:
<!-- 註釋 -->hello于<k>hello</k><?php echo $a; ?>。在这个例子里,将符合processing-instruction('php')会传回值。节点描述为一个逻辑真假表达式,任何真假判断表达式都可在节点后方括号里表示,这条件必须在XPath处理这个节点前先被满足。在某一步骤可有多少个描述并没有限制。
范例如下: //a[@href='help.php'], 这将检查 a 元素有没有 href 属性,并且该它的值是 help.php。 //a[@href='help.php'][../div/@class='header']/@target 将会选择符合条件的 a 元素的 target 属性;符合要求 a 元素有 href 属性且值为 help.php;并且 a 元素有父辈 div 元素,其自身有 class 属性,值为 header。
XPath 1.0定义四种资料型别:节点型(本身无序的节点组)、字串型、数字型、与布尔型。
有效的运算符有:
/、//以及..运算符,一般用于轴描述。函数有:
某些常用的函式详列如下。完整明细请参照W3C建议书。
s1包含s2返回真。使用操作子:=, !=, <=, <, >= 和 >的表达式可以创造于术语内。布林表达式可用括号()、布林操作子and与or、和/或者上述的not()函式联合起来。数值计算使用*, +, -, div和mod。字串可包含任何Unicode字符。
述语内外,整个节点组可利用"|"字符联合起来。
v[x or y] | w[z] 会返回单一节点组,包括现行上下文找到的所有拥有x或y子元素的v 元素、有z子元素的w元素。
//item[@price > 2*@discount] 会选取price属性至少两倍于discount属性数值的物件
在W3C建议下,XPath 1.0于1999年11月16日发表。XPath 2.0目前正在W3C审核过程的最终阶段。XPath 2.0表达了XPath语言在大小与能力上显著的增加。
最值得大书特书的改变是XPath 2.0有了更丰富的型别系统;XPath 2.0支援不可分割型态,如在XML Schema内建型态定义一样,并且也可自纲要(schema)导入用户自定型别。现在每个值都是一个序列(一个单一不可分割值或节点都被视为长度一的序列)。XPath 1.0节点组被节点序列取代,它可以是任何顺序。
为了支援更丰富的型别组,XPath 2.0提供相当延展的函式与操作子群。
XPath 2.0实际上是XQuery 1.0的子集合。它提供了一个for表达式。该式是XQuery里“FLWOR”表达式的缩减版。利用列出XQuery省去的部分来描述该语言是可能的。主要范例是查询前导语(query prolog)、元素和属性建构式、“FLWOR”语法的余项式、以及typeswitch表达式。
|
查 • 论 • 编 • 历
|
|
|---|---|
| 文档呈现语言 | HTML* - XHTML* - XML* - XForms* - DHTML* |
| 样式格式描述语言 | CSS* - XSL* |
| 动态网页技术 | CGI - ASP - ASP.NET - ColdFusion - JSP - PHP - Ruby on Rails |
| 客户端交互技术 | ActiveX - Java Applet - Flash - Flex - AJAX - XMLHTTP* AIR- Silverlight - JavaFX |
| 客户端脚本语言 | JavaScript - JScript - VBScript - ECMAScript - ActionScript |
| 标识定位语言 | URL - URI - XPath - URL重写 |
| 文档纲要语言 | DTD* - XML Schema* |
| *由W3C制定和维护的标准与规范 | |
Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History