使用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
答案 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']”