您在[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>
它返回:
编辑
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
,无论标签是什么,只有在它被选中后,它才会检查实际标签。这样input
就不会选择在同一级别上更远的那个。