如何为以下 HTML 制定 XPath 表达式以获取 a
节点(value A
)之后的第一个输入节点的属性值:
<a href="http://www.link.com">link</a>
<input value="value A" />
<input value="value B" />
我试过:
//input[(preceding-sibling::a[1])]/@value
但是当我只想要 a
节点是最近的前一个兄弟节点的属性时,这会获取两个输入节点的值属性。
最佳答案
您在错误的节点上使用了 [1]
谓词。您需要第一个具有 preciding-sibling::a
的输入,而不是给定级别的第一个 a
元素之后的所有输入。
这应该会产生正确的结果:
//a/following-sibling::input[1]/@value
这意味着:对于在文档中的任何级别找到的每个元素 a
,选择跟随它的第一个 input
元素,同时是它的兄弟元素。然后读取它的 value
属性。
对于这个输入:
<xml>
<p>
<input value="value A" />
<a href="http://www.link.com">link</a>
<input value="value B" />
<input value="value C" />
</p>
<p>
<a href="http://www.link.com">link</a>
<input value="value D" />
<input value="value E" />
<a href="http://www.link.com">link</a>
<input value="value F" />
</p>
</xml>
它返回:
- B值
- 值(value)D
- 值(value)F
编辑
只要 a
和它后面的第一个 input
之间没有元素,这就可以工作。
例如,输入如下:
<a href="http://www.link.com">link</a>
<strong>OMG NOEZ!</strong>
<input value="value A" />
值 A 仍然被选中
如果没问题,就保留上面的表达式。如果不是,则修改为过滤其他元素:
//a/following-sibling::*[1][self::input]/@value
这会选择 a
的第一个后续同级标签,无论标签是什么,只有在选择标签后才会检查实际标签。这样就不会选择在同一级别更远的输入
。
关于xpath - 我如何制定此 XPath 表达式来选择 sibling ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12126120/