很久之前就接触xpath了,操作xml文件很好用。但是久而久之不用,记忆就渐渐模糊了。今儿又重新复习一下
胡诌了一个人的xml文件包含头部 、身体什么鬼的
<?xml version="1.0" encoding="utf-8" ?> <RenXinXi> <Ren> <Tou> <YanJing id="1" name="张三">棕色眼睛</YanJing> <ErDuo>招风大耳朵</ErDuo> </Tou> <ShenTi> <Fu>八块腹肌</Fu> </ShenTi> </Ren> <Ren> <Tou> <YanJing id="2" name="李四">红色眼睛</YanJing> <ErDuo>尖尖耳朵</ErDuo> </Tou> <ShenTi> <Fu>一块腹肌</Fu> </ShenTi> </Ren> </RenXinXi>
1、首先查询了一下xpath的语法
a.路径表达式
nodeName :选取此节点的所有子节点
/:从根节点选起
//:选取匹配节点的所有子节点 ,而不考虑他们的位置
.:选取当前节点
..:选取当前节点的父节点
@:选取属性
b.包含谓语的表达式
/RenXinXi/Ren[1] 选取RenXin的子节点下第一个Ren元素
/RenXinXi/Ren[last()] 选最后一个Ren元素
/RenXin/Ren[last()-1] 倒数第二个
/RenXin/Ren[position()<3] 最前面二个元素
//YanJing[@id] 选取属性为id的所有YangJing元素
//YanJing[@id='1'] 选取出id=1的所有YanJing元素
/RenXinXi/Ren/ShenTi[ShouChang>15] 选取所有ShouChang大于15的ShenTi元素
c.通配符的使用
*:配合任何元素节点 //* 选取文档中所有元素
@*:配合任何节点属性 //Ren[@*]
d.多路径选择
/RenXinXi/Ren/Tou/YanJing | ErDuo 选取所有YanJing和ErDuo
e.轴的使用
语法 轴名称::节点测试[谓语]
child::book | 选取所有属于当前节点的子元素的 book 节点。 |
attribute::lang | 选取当前节点的 lang 属性。 |
child::* | 选取当前节点的所有子元素。 |
attribute::* | 选取当前节点的所有属性。 |
child::text() | 选取当前节点的所有文本子节点。 |
child::node() | 选取当前节点的所有子节点。 |
descendant::book | 选取当前节点的所有 book 后代。 |
ancestor::book | 选择当前节点的所有 book 先辈。 |
ancestor-or-self::book | 选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点) |
child::*/child::price | 选取当前节点的所有 price 孙节点。 |