使用 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 在示例 1 中选择 myForm 表单标记,但在示例 2 中不
最佳答案
根据您的描述,我不能 100% 确定您是要选择 form
元素还是 span
元素。您似乎更有可能选择表单
,因此我将首先解决这个问题。
如果最后没有斜杠,带有 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']
关于xpath - 如何检查节点是否在表单标签内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427846/