代码之家  ›  专栏  ›  技术社区  ›  James

xpath从某个元素后的元素获取文本

  •  5
  • James  · 技术社区  · 14 年前

    所以现在如果我有这样的东西:

    //div[@class='artist']/p[x]/text()
    

    x可以是3或4,甚至可能是一个不同的数字。幸运的是,如果我要找的不在3中,我可以检查是否为空,然后继续查找直到找到文本。问题是我宁愿知道我每次都会选择正确的元素。所以我试了一下:

    div[@class='people']/h3[text()='h3 text']/p/text()
    

    因为总会有一个 <p> 刚好在…之后 <h3>h3 text</h3> . 但是,这永远不会返回任何内容,并且通常会导致错误。如果我删除/p,我将得到“h3文本”返回。

    不管怎样,我该怎么办 <P & GT; 之后直接 <h3> ?

    顺便说一下,我在爪哇使用HTMLoad。

    2 回复  |  直到 14 年前
        1
  •  10
  •   John Kugelman Michael Hodel    14 年前

    默认情况下,如果不指定 axis 你得到了 child:: 轴,这就是为什么 / 运算符似乎会逐子级下降DOM树。有一种暗示 孩子: 在每个斜线之后。

    在你的情况下,你不想找到 小孩 <div> ,您想找到一个 兄弟姐妹 它的。同级是处于相同嵌套级别的元素。具体来说,您应该使用 following-sibling:: 轴。

    div[@class='people']/h3[text()='h3 text']/following-sibling::p/text()
    

    XPath轴

    Axes 是xpath的高级功能。它们是使XPath特别强大的功能之一。

    你已经熟悉了另一个轴心,尽管你可能还没有意识到它: @ 符号是 attribute:: . 当你写作时 @href 你真的在说 attribute::href 在寻找一个 属性 称为“href”,而不是 小孩 .

    斧头,嗯?速记,嗯?告诉我更多,你说?好啊!

    • . .. 是更详细的缩写 self::node() parent::node() ,分别。如果你愿意的话,你可以用较长的表格。

    • 这个 // 你通常看到的接线员 //p body//a 有一个隐藏的 descendant-or-self::node() 在斜线之间。 //P /descendant-or-self::node()/p .

        2
  •  1
  •   Dimitre Novatchev    14 年前

    不管怎样,我该怎么办 <p> 之后直接 <h3> ?

    使用 :

    div[@class='people']/h3[text()='h3 text']/following-sibling::p[1]