如何在指定元素之前获取下一个兄弟姐妹

时间:2011-04-22 07:47:58

标签: xml xpath

由于Visual Web Ripper的强大功能,我正在使用Xpath来抓取一个网站(合法地一次!!)。

我需要获得的内容之一是H3标签后面的P标签内容。现在这很好,如果我想要下一个我可以使用以下代码:

//DIV[@id='content']/H3[. = 'Prices']/following-sibling::P[1]

但是我怎么能说我想要所有P标签的内容 - 直到下一个H3?

3 个答案:

答案 0 :(得分:1)

使用

//div[@id='content']/h3[. = 'Prices']
  /following-sibling::p
    [count
      (. | 
       //div[@id='content']
              /h3[. = 'Prices']/following-sibling::h3/preceding-sibling::p
      )
     =
     count
      (
       //div[@id='content']
             /h3[. = 'Prices']/following-sibling::h3/preceding-sibling::p
       )
      ]

这里我们使用Kayessian公式来交叉两个节点集$ns1$ns2

$ns1[count(.|$ns2) = count($ns2)]

答案 1 :(得分:0)

使用Visual Web Ripper,您可以使用包含所有兄弟节点的非标准函数SPAN,直到遇到指定的元素。

尝试:

//DIV[@id='content']/H3[. = 'Prices']/following-sibling::P[SPAN('H3')]

答案 2 :(得分:-1)

感谢您的反馈和投入,但我发现活动更容易/更快/更整洁(欢迎评论)

//DIV[@id='content']/H3[. = 'Prices']/following-sibling::P[./preceding-sibling::H3[1][. = 'Prices']]