XML学习笔记 4. xpath
Xpath 是W3C制定的用来在XML文档中进行导航和查询的路径表达语句,可以在XML文档层次结构中的相关元素节点及内容进行检索和定位。
xpath的绝对路径为/step1/step2,相对路径为step1/step2/step3 . xpath是有 / 和step组成,/表示进行下一步的step的开始,而step表示按照当前/提供的路径进行的寻找操作。 step由三个部分组成: 轴坐标符:: 节点测试 【判定谓词】 轴坐标符 AxisSpecifier 表示从当前路径向什么方向进行寻找。:共有13种: 1.ancestor 查找当前路径节点的所有祖先节点 2.ancestor-or-self 查找所有祖先节点和自己 3. attribute 查找当前节点的属性 4:child 查找所有子节点 5. descendant 查找所有后代节点 6.descendant-or-self 查找所有后代节点加自己 7.following 查找当前节点之后的所有节点,之后的节点是指节点的开始标记在当前节点的结束标记之后的节点。 8.following-sibling 查找之后的兄弟节点 9.namespace 查找节点的命名空间 10.parent 当前节点的父节点 11.preceding 当前节点之前的所有节点 12.preceding-sibling 当前节点之前的兄弟节点 13.self 节点自己。
节点测试 NodeTest 对节点进行或名称类型测试,取对应要求名称或类型的节点 //node() 是查找容易节点 //book 是查找容易名字叫book‘的节点
判定谓词 Predicate 使用[]包含,可以调用一些函数来判断是否符合一定的要求 其中一般调用函数来进行判断,常用的函数如下: string()将内容转换为字符串 string-length()返回字符串长度或者当前节点的字符串长度 contains(string1,string2)判断string1中是否含有string2 starts-with(string1,string2) string1是否以string2为开头 ends-with(string1,string2) string1是否以string2为结尾 matches(string,pattern) string是否匹配对应的正则表达式 name() 返回当前节点的名称 local-name() 返回当前节点的名称 不带命名空间 root() 返回文档节点即根节点 empty() 判断是否为空 exists() 判断是否存在 cout(....) 返回节点的数量 avg(),max(),min(),sum() 分别是 取 属 性 的平均值,最大值,最小值和 和。 position() 返回节点的位置 /book[3]这里是缩写,其实是[position()=3]的判定。position()是从1开始计数的。 last() 返回当前处理的节点序列的数量 //book[last()] 为返回最后一个book
xpath中的一些常用缩写: 无 表示默认的child::寻找子节点 @ 表示attribute:: . 表示self::node()即当前节点 .. 表示parent::node()即父节点 // 表示/descend-or self::node()/即所有子孙节点和自己的子节点
作业中的几个实例: 1.查找所有非最外层的section元素: //section//section /descendant-or-self::node()/section/descendant-or-self::node()/section /descendant-or-self::node()/section//section 2.查找只包含三个子孙section元素(包括所有后代section)的section元素; //section[count(descendant::section)=3] //section[count(descendant-or-self::section)=4] 3.查找出id属性为intro,title元素中包含字符串“Web”的section元素的父节点。 //section[@id="intro"][matches(./title/text(),"Web")]/parent::* //section[@id="intro"]/title[matches(text(),"Web")]/parent::*/parent::* /descendant-or-self::node()/section[@id="intro"][matches(./title/text(),"Web")]/parent::* (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |