所以现在如果我有这样的事情:
//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。
默认情况下,当您不指定轴时,会得到child::
轴,这就是为什么/
运算符似乎逐子递归DOM树的原因。child::
每个斜杠后都有一个暗示。
在您的情况下,您不想找到的子项<div>
,而是想找到它的同级项。同级是处于相同嵌套级别的元素。具体来说,您应该使用following-sibling::
轴。
div[@class='people']/h3[text()='h3 text']/following-sibling::p/text()
轴是XPath的高级功能。它们是使XPath特别强大的功能之一。
尽管您可能还没有意识到它,但您已经熟悉另一个轴:该@
符号是的简写attribute::
。在写时,@href
您实际上attribute::href
是在说,就像在寻找一个名为“ href” 的属性而不是child一样。
斧头,对吗?速记,是吗?告诉我更多,你说呢?好!
.
和..
分别是更冗长self::node()
和的简写parent::node()
。如果需要,可以使用更长的表格。
将//
你常用看到的运营商//p
或body//a
具有隐蔽性descendant-or-self::node()
的斜线之间。//p
是的简写/descendant-or-self::node()/p
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句