XPath从某个元素后的元素中获取文本

时间:2010-11-16 05:13:41

标签: java xpath

所以现在如果我有这样的事情:

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

x可以是3或4,也可以是不同的数字。幸运的是,如果我要找的不是3,我可以检查null并继续直到找到文本。问题是我宁愿知道每次都要去正确的元素。所以我尝试了这个:

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

因为<p>之后总会有<h3>h3 text</h3>。但是,这永远不会返回任何内容,通常会导致错误。如果我删除/ p,我将返回'h3 text'。

无论如何,如何在<p>之后直接获得<h3>

BTW,我在Java中使用HTMLCleaner。

2 个答案:

答案 0 :(得分:10)

默认情况下,如果未指定axis,则会获得child::轴,这就是/运算符似乎按子节点下降DOM树的原因。每个斜线后都有一个隐含的child::

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

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

XPath Axes

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

您已经熟悉了另一个轴,但您可能没有意识到:@符号是attribute::的简写。当您写@href时,您实际上是在说attribute::href,就像查找名为“href”的属性而不是一样。

斧头,嗯?简写,是吗?告诉我更多,你说? OK!

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

  • 您通常看作////p的{​​{1}}运算符在斜杠之间隐藏body//adescendant-or-self::node()//p

  • 的简写

答案 1 :(得分:1)

  

无论如何,我如何得到<p>   直接在<h3>之后?

使用

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