XPath语法
XPath使用路径表达式选取XML文档中的节点或者节点集。
路径表达式
表达式 描述 nodename 获得该节点下的所有节点 / 从根节点开始 // 从匹配选择的当前节点开始,不考虑位置 . 选取当前节点 … 选取当前节点的父节点 @ 选取属性
比如:
表达式 描述 nation 选取nation元素所有子节点 /nation 选取根节点nation,斜杠 / 开始表示当该元素的绝对路径 nation/province 选取属于nation子元素的所有province元素 //province 选取所有province元素 nation//province 选取nation元素后代的所有province元素 //@lang 选取名为lang的所有属性
谓语
谓语放在路径表达式后面的方括号里。用于对选取的结果筛选。
路径表达式 结果 /nation/province[1] 选取属于nation子元素的第一个province元素 /nation/province[last()] 选取属于nation子元素的最后一个province元素 /nation/province[last()-1] 选取属于nation子元素的倒数第二个province元素 /nation/province[position()<10 选取属于nation子元素的前9个province元素,位置是从1开始 //title[@lang] 选取所有lang属性的title元素 //title[@lang=‘eng’] 选取所有lang属性值为eng的title元素 nation/province[popu>1000] 选取nation子元素所有province元素,且popu元素值大于1000 nation/province[popi>1000]//title 选取nation子元素所有province元素,其中price元素大于1000。从结果中选取所有title元素
匹配位置节点
XPath通配符可以匹配位置的XML元素。
通配符 描述 * 匹配任何元素节点 @* 匹配任何属性节点 node() 匹配任何类型的节点
比如:
路径表达式 结果 /nation/* 选取nation元素的所有子元素 //* 选取文档中的所有元素 //title[@*] 选取所有带有属性的title元素
表达式组合
使用 | 将表达式组合在一起,选取多个路径。
路径表达式 结果 //nation/state | //nation/province 选取nation元素所有的state元素和province元素 //state | //province 选取所有的state元素和province元素 /nation/province/worker | //popu 选取nation元素下province元素所有的worker元素,和文档中所有的popu元素
XPath轴
轴定义相对于当前节点的所有节点集
轴名称 结果 ancestor 选取当前节点的所有祖先节点 ancestor-or-self 选取当前节点的所有祖先节点以及自身节点 attribute 选取当前节点的所有属性 child 选取当前节点的所有子元素 descendant 选取当前节点的所有子孙元素 descendant-or-self 选取当前节点的所有子孙元素以及自身节点 following 选取文档中当前节点的结束标签之后的所有节点 following-sibling 选取当前节点之后的所有兄弟节点 namespace 选取当前节点的所有命名空间节点 parent 选取当前节点的父节点 preceding 选取文档中当前节点的开始标签之前的所有节点 preceding-sibling 选取当前节点之前的所有兄弟节点 self 选取当前节点
XPath运算符
XPath表达式可返回节点集、字符串、逻辑、以及数字
运算符 演示 结果 | //province | //state 返回所有province和state元素集 + 6 + 4 10 - 6 - 4 2 * 6*4 24 div 4 div 2 2 = popu = 1000 如果popu为1000,返回true,否则返回false != popu != 1000 如果popu不是1000,返回true,否则返回false < popu < 1000 如果popu小于1000,返回true,否则返回false <= popu <= 1000 满足条件返回true,否则返回false > popu > 1000 满足条件返回true,否则返回false >= popu >= 1000 满足条件返回true,否则返回false or popu = 1000 or popu = 2000 popu为1000或者2000返回true,否则返回false and popu > 1000 and popu< 2000 popu为1000与2000之间的值,返回true,否则返回false mod 5 mod 2 1
函数
名称 说明 fn:position() 返回当前正处理的节点的index位置 fn:last() 返回当前正处理节点列表中项目数目 fn:current-dataTime() 返回当前的dateTime(带有时区) fn:current-data() 返回当前的日期(带有时区) fn:current-time() 返回当前的时间(带有时区) fn:implicit-timezone() fn:default-collation() 返回默认对照的值 fn:static-base-uri