所以现在如果我有这样的事情:
//div[@class='artist']/p[x]/text()
Run Code Online (Sandbox Code Playgroud)
x可以是3或4,也可以是不同的数字.幸运的是,如果我要找的不是3,我可以检查null并继续直到找到文本.问题是我宁愿知道每次都要去正确的元素.所以我尝试了这个:
div[@class='people']/h3[text()='h3 text']/p/text()
Run Code Online (Sandbox Code Playgroud)
因为总会有一个<p>权利<h3>h3 text</h3>.但是,这永远不会返回任何内容,通常会导致错误.如果我删除/ p我将返回'h3 text'.
无论如何,我怎么<p>直接得到它<h3>?
顺便说一下,我在Java中使用HTMLCleaner.
Joh*_*ica 10
默认情况下,当您未指定轴时,您将获得child::轴,这就是/操作符似乎按子项下降DOM树的原因.child::每次斜线后都有一个暗示.
在你的情况,你不希望找到孩子的<div>,你想找到一个兄弟的吧.兄弟姐妹是同一嵌套级别的元素.具体来说,您应该使用following-sibling::轴.
div[@class='people']/h3[text()='h3 text']/following-sibling::p/text()
Run Code Online (Sandbox Code Playgroud)
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.
| 归档时间: |
|
| 查看次数: |
6238 次 |
| 最近记录: |