XPath基本概念(二)

来源:互联网 发布:sql force 编辑:程序博客网 时间:2024/06/05 09:10
XPath的路径说明是比较简单的,最基本的是路径匹配。很像文件路径的表达方式。路径匹配的符号有: 
"/"选择根结点或是表示路径。比如“/A/B/C”表示匹配A结点的孙节点C 
"//"匹配子元素。比如:“A”匹配所有A元素,“//A/B”匹配A中的所有B元素 
"*"通配符。表示所有元素。比如“/A/*”匹配A节点的所有子节点。 
"|"或运算,表示路径的“或”运算。比如“//A|//B”表示所有A和B元素 
仅仅有路径说明是不够的,下面加入关于位置的规定: 
[1]选择第一个元素 
[last()]选择最后一个元素 
[number]按照指定数字的确定位置。/booklist/book[3],匹配looklist中第三个book元素 
[position()=number]由数字指定第几个位置的元素 
[position()>number]匹配所有位置号大于等于指定数字的元素 
现在我们来看看,加入对匹配属性的要求。这样,对数据内容的要求就比较完整了。对属性的匹配要求主要是通过“@”运算符来完成的。 
[@id]匹配具有属性“id”的元素 
[@name]匹配具有属性名“name”的元素 
[@*]匹配有属性的元素 
[not(@*)]匹配没有属性的元素 
[@id="name"]匹配有属性“id”为“name”的元素 
XPath还提供类似于亲属关系的匹配方式。每个节点都有祖先节点、父节点、兄弟节点、子节点、后继节点。 
child关键字匹配子元素。像"child::A"匹配子元素节点"A","child::*"匹配所有子元素节点,"child::text()"匹配所有文本子节点,"child::node()"匹配所有子节点,包括所有类型。 
descendant关键字匹配后继节点。"descendant::para"匹配后继节点"para","descendant::*"匹配所有后继节点,不包括当前节点。"descendant-or-self::*"属性匹配所有后继节点和当前节点。 
还有"ancestor,foollow,self,parent"等关键字,使用方法举例说明如下: 
ancestor-or-self::para匹配para的祖先,如果当前节点是para。匹配结果包括当前节点。 
ancestor::para匹配所有para的祖先。 
self::para所有para自身元素。 
follow-sibling::*匹配所有后面紧邻的兄弟元素节点。 
follow::*匹配所有后续节点。 
preceding-sibling::book[position()=1]匹配book的前一个兄弟节点。 
对于属性,使用关键字“attribute”。比如"attribute::*"匹配所有属性节点。“attribute::name”匹配属性“name”指定的属性节点。 
下面看几个综合的例子: 
 child::chapter/descendant::para 
匹配当前节点的"chapter"子节点的"para"后继节点。 
 child::para[position()=last()-1] 
匹配位于倒数第二个"para"子元素。 
/child::doc/child::chapter[position()=5]/child::section[position()=2] 
匹配"doc"节点的子节点——第5章(chapter)第2节(section)。 
child::*[self::chapter or self::appendix] 
匹配当前节点的"chapter"子元素和"appendix"子元素。 
child::para[position()=5][attribute::type="warning"] 
当当前节点的第5个"para"子节点具有值为"warning"的属性"type",那么匹配这个子节点。 
原创粉丝点击