有助于理解XPath

时间:2010-09-28 14:59:18

标签: xpath

我有这样的xpath表达式:

link[@rel='alternate' and @type='text/html' or not(@rel)]/@href | link/text()

实际上我不明白符号|

3 个答案:

答案 0 :(得分:2)

符号|是一个工会。它抓住所有与左手侧或右手侧匹配的元素。

xpath所说的是:

  • 获取具有属性“rel = alternate”和属性“type = text / html”的所有链接标记的href属性,或获取所有不具有rel属性的链接标记的href

还抓住(因为结合):

  • 抓取页面上所有链接标记的内部文本。

有点奇怪的XPath,但就是这样。

答案 1 :(得分:0)

  

实际上我不明白   符号|

这是XPath union operator

根据 W3 XPath 2.0 Spec

中的定义
  

•工会和|经营者   当量。他们采取两个节点   序列作为操作数并返回a   包含所有节点的序列   发生在任一操作数中。

当然,“union”(英文单词)运算符仅在XPath 2.0和XPath 1.0中添加,我们只有它的早期同义词,由|字符表示。

因此,在

的特定情况下
link[@rel='alternate' and @type='text/html' or not(@rel)]/@href | link/text()

上面的XPath表达式选择两个集合的联合

  1. link[@rel='alternate' and @type='text/html' or not(@rel)]/@href

  2. 选择的所有节点
  3. 所有节点,由link/text()

  4. 选择

    Union是集合理论(和数学)中的标准操作,虽然符号'U'用于表示那里的联合。

    引用Wikipedia 的定义:

      

    两组A和B的联合是   在A或中的点的集合   在B(或两者中):

    一个简单的例子

    A = {1,2,3,4,5,6}
    
    B = {1,5,6,7,8}
    
    
    A U B = {1,2,3,4,5,6,7,8}
    

答案 2 :(得分:-1)

XPath中的管道(|)组合了表达式。因此,这将返回链接元素(与谓词匹配)的href属性和任何链接的文本内容

所以给出像

这样的片段
  <link>test</link>
  <link href="http://www.google.com">Google</link>
  <link rel="zzzz" href="http://www.stackoverflow.com">Stack Overflow</link>
你会得到:

test
http://www.google.com
Google
Stack Overflow