2

使用 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 中

4

3 回答 3

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']
于 2013-01-20T18:52:54.460 回答
1

你自己的尝试

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

对我来说看起来不错。

于 2013-01-20T22:13:29.207 回答
0

你可以简单地使用,

“表格//跨度[id='mySpan']”

于 2013-01-20T18:53:00.123 回答