XPath

出处

http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html
http://www.w3school.com.cn/xpath/xpath_syntax.asp

从根开始定位

XPath语法:

/N1/N2/.../Nm

TPL语法:

Doc[!N1/N2/.../Nm]    // 取最后一个满足条件的元素
Doc.select(!N1/N2/.../Nm)  // 取所有满足条件的元素

匹配样例:

<N1>
  <N2>
    ...
    <Nm> // 要选择该元素
        ...
    </Nm>
  </N2>
</N1>

任意位置匹配

XPath语法:

//M1/M2/.../Mn

TPL语法:

Doc[!!N1/N2/.../Nm]    // 取最后一个满足条件的元素
Doc.select(!!N1/N2/.../Nm)  // 取所有满足条件的元素

匹配样例:

<Doc>
...
<M1>
  <M2>
    ...
    <Mn> // 要选择该元素
        ...
    </Mn>
  </M2>
</M1>
...
</Doc>

通配符

XPath语法:

/N1/N2/.../Nm/*    // 注意*可出现在任何位置,如下例。
/*/*/*/M             // 所有有3个祖先的M元素
//*            // 选择所有元素

TPL语法:

Doc.select(!N1/N2/.../Nm/any())
Doc.select(!any()/any()/any()/M)
Doc.select(!!any())

选择第N个元素

XPath语法:

/N1/N2/.../Nm[n]    // select(/N1/N2/.../Nm)得到了很多个Nm结点,这是取第n个
/*/*/*/M[last()]     // 取最后一个M结点

TPL语法:

todo

选择元素属性

/N1/N2/.../Nm[@prop]        // 选择有prop属性的Nm结点
/N1/N2/.../Nm[@prop="value"] // 选择有prop属性且值为value的Nm结点
/N1/N2/.../Nm[@*]             // 选择有属性(不能没有)的Nm结点
/N1/N2/.../Nm[not(@prop)]     // 选择没有prop属性的Nm结点
/N1/N2/.../Nm[not(@*)]         // 选择没有属性的Nm结点

TPL中没有属性。

count:元素个数

/N1/N2/.../*[count(Nm)=4]      // 选择有子元素Nm且Nm个数为4的结点(不是选Nm,是选择其父亲)

小结:

对XPath而言,operator[]有两个含义:一个是下标n(或last()),一个是bool表达式(筛选条件)。但也可以把下标n(或last())看作是bool表达式(筛选条件)。

或运算(operator |)

由于XPath本质上是查询(Query)语言,故此支持或运算:

/N1/N2/.../Nm | //M1/M2/.../Mn
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License