如何构造这个XPath表达式来选择同级?
如何为以下HTML的如何构造这个XPath表达式来选择同级?,xpath,Xpath,如何为以下HTML的a节点(value a)后面的第一个输入节点获取属性值,制定XPath表达式: <a href="http://www.link.com">link</a> <input value="value A" /> <input value="value B" /> 但是当我只需要a节点是最近的前一个同级节点的节点的属性时,这会获取两个输入节点的value属性。您在错误的节点上使用了[1]谓词。您希望第一个输入具有精确同级::a,而
a
节点(value a
)后面的第一个输入节点获取属性值,制定XPath表达式:
<a href="http://www.link.com">link</a>
<input value="value A" />
<input value="value B" />
但是当我只需要
a
节点是最近的前一个同级节点的节点的属性时,这会获取两个输入节点的value属性。您在错误的节点上使用了[1]
谓词。您希望第一个输入具有精确同级::a
,而不是在给定级别上跟随第一个a
元素的所有输入
这将产生正确的结果:
//a/以下同级::输入[1]/@value
这意味着:对于文档中任何级别上找到的每个元素a
,选择紧随其后的第一个input
元素,同时选择其同级元素。然后读取其值
属性
对于此输入:
<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/以下同级::*[1][self::input]/@value
这将选择a
的第一个后续同级,无论标记是什么,只有在选择后才会检查实际标记。这样就不会选择同一级别的输入
<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 href="http://www.link.com">link</a>
<strong>OMG NOEZ!</strong>
<input value="value A" />