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文本”。

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

顺便说一句,我正在为此使用Java中的HTMLCleaner。

约翰·库格曼(John Kugelman):

默认情况下,当您不指定轴时,会得到child::轴,这就是为什么/运算符似乎逐子递归DOM树的原因。child::每个斜杠后都有一个暗示

在您的情况下,您不想找到的<div>,而是想找到同级项。同级是处于相同嵌套级别的元素。具体来说,您应该使用following-sibling::轴。

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

XPath轴

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

尽管您可能还没有意识到它,但您已经熟悉另一个轴:该@符号是的简写attribute::在写时,@href您实际上attribute::href是在,就像在寻找一个名为“ href” 属性而不是child一样

斧头,对吗?速记,是吗?告诉我更多,你说呢?好!

  • ...分别是更冗长self::node()和的简写parent::node()如果需要,可以使用更长的表格。

  • //你常用看到的运营商//pbody//a具有隐蔽性descendant-or-self::node()的斜线之间。//p是的简写/descendant-or-self::node()/p

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章