XPath

XPath节点



    
          100
          jack
          20
    

其中,文档节点100元素节点,lang="en"是属性节点,jack是文本
节点间关系包括父(Parent),子(Children),同胞(Sibling),先辈(Ancestor),后代(Descendant)。如student元素是id,name,age的父。

XPath语法

使用路径表达式来选取节点或节点集。

表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 选择任意位置的某个节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

如:



    
          100
          jack
          20
    
    
          101
          tom
          21
    

  • 选取classroom的所有子节点 classroom
  • 选取根元素classroom /classroom
  • 选取属于classroom的子元素的所有student元素 classroom/student
  • 选取所有student子元素,而不管它们在文档中的位置
    //student
  • 选取属于classroom的子元素的所有student元素 ,而不管它们在classroom下的什么位置classroom//student
  • 选取名为lang的所有属性 //@lang
    以上是用来选取所有符合条件的节点。
    而若要选取某个特定的节点,则需要用到谓语(嵌在方括号里)。
  • 选取属于classroom子元素的第一个student元素/classroom/student[1]
  • 选取属于classroom子元素的最后一个student元素/calssroom/student[last()]
  • 选取属于classroom子元素的倒数第二个student元素/calssroom/student[last()-1]
  • 选取最前面的两个属于classroom元素的子元素的student元素/calssroom/student[position()<3]
  • 选取所有拥有名为lang的属性的name元素//name[@lang]
  • 选取所有name元素,且这些元素拥有值为eng的lang属性//name[@lang='eng']
  • 选取classroom元素的所有student元素,且其中的age元素的值大于20 /classroom/student[age>20]
  • 选取classroom元素的所有子元素/classroom/*
  • 选取所有带有属性的name元素//name[@*]
  • 选取student元素的所有name和age元素 //student/name | //student/age

XPath轴

轴定义了所选节点与当前节点间的树关系。若首先提取到一个节点信息,然后想在这个节点的基础上提取它的子节点或者父节点,就可以用到这个概念。

  1. 绝对路径:起始于正斜杠(/),如/step/step/...
  2. 相对路径:step/step/...
    首先提出一个“步”的概念:轴名称::节点测试[谓语]。
  • 选取当前classroom节点中子元素的student节点 /classroom/child::student
    *选取/classroom/student/name节点下的所有属性/classroom/student/name/attribute::*

XPath运算符

如:

  • 除 : /classroom/student[age = 40 div 2],类似,加减乘分别为+ - *
  • 与 : /classroom/student[age > 20 and age < 25],类似,“或”为and

你可能感兴趣的:(XPath)