如何检查节点是否在表单标签内?

时间:2013-01-20 18:35:58

标签: xpath

使用XPath,如何确定节点是否在表单标记内?我想我正在尝试找到其祖先/之前的表格标签(但我无法让它工作)。

示例1:

<form id="doNotKnowIDofForm">
<div id="level1">
    <span id="mySpan">someText</span>
</div>
</form>

示例2:

<form id="doNotKnowIDofForm">
   This is a closed form.
</form>
<div id="level1">
    <span id="mySpan">someText</span>
</div>
</form>

我可以使用xpath "//span[id='mySpan']"来定位span节点。但我想知道mySpan是否在表单内(我不知道表单的id)。我尝试过"//span[id='mySpan']/preceding::form/""//span[id='mySpan']/ancestor::form/"

提前致谢。

编辑:我希望XPath在Example1中选择myForm表单标记,但在Example2中选择 NOT

3 个答案:

答案 0 :(得分:2)

我不是100%确定您的描述是否要选择form元素或span元素。你似乎更有可能选择form,所以我先解决这个问题。

如果最后没有斜杠,那么带有ancestor::form的XPath就可以了,但它比它需要的更迂回。我认为这是一种更好的方式:

//form[.//span/@id = 'mySpan']

或者这个:

//form[descendant::span/@id = 'mySpan']

要生成一个仅在某个节点位于表单内的情况下定位某些节点的XPath,您可以将ancestor::form放在谓词中:

//span[@id = 'mySpan' and ancestor::form]

或者你可以这样做,这将再次更直接:

//form//span[@id = 'mySpan']

答案 1 :(得分:1)

你自己的尝试

//span[id='mySpan']/ancestor::form/

对我来说很好。

答案 2 :(得分:0)

你可以简单地使用,

“形式//跨度[ID = 'mySpan']”