如何为以下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
节点是最近的兄弟节点的节点的属性时,这将获得两个输入节点的value属性 .
1 回答
您在错误的节点上使用
[1]
谓词 . 您希望第一个输入具有preciding-sibling::a
,而不是在给定级别的第一个a
元素之后的所有输入 .这应该会产生正确的结果:
//a/following-sibling::input[1]/@value
这意味着:对于在文档中任何级别找到的每个元素
a
,选择其后面的第一个input
元素,同时作为它的兄弟 . 然后读取它的value
属性 .对于此输入:
它返回:
值B
值D.
值F.
编辑
这是有效的,前提是
a
与其后的第一个input
之间没有元素 .例如,输入如下:
值A仍然被选中
如果没关系,请保留上面的表达式 . 如果不是,请像这样修改它以过滤其他元素:
//a/following-sibling::*[1][self::input]/@value
这将选择
a
的第一个以下兄弟,无论标签是什么,只有在它被选中之后才检查实际标签 . 这样,未选择进一步处于同一级别的input
.