xpath

很久之前就接触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 孙节点。
原文地址:https://www.cnblogs.com/yuanyanyan/p/6699154.html