我的DOM中有重复的嵌套结构,我试图在当前节点级别找到某些输入元素。
例如,假设当前节点为<div data-model="user" data-id="1">
。如何在没有<input value=foo
的情况下获取<input value=bar
(因为它位于自己的data-model
下)?
<div>
<div data-model="user" data-id="1">
<div>
<input data-field="email" value="foo">
<div data-model="user" data-id="2">
<div>
<input data-field="email" value="bar">
</div>
</div>
</div>
</div>
</div>
这是我到目前为止在xpath中的内容:
//*[@data-model="user"]//*[@data-field and ancestor::*[@data-model="user" ....]]
答案 0 :(得分:1)
你可以分两步完成。首先评估
count(ancestor-or-self::div[@data-model = 'user'])
作为数字,当前div作为上下文节点。然后取这个数字$n
并评估
.//input[count(ancestor::div[@data-model = 'user']) = $n]
这里的想法是找到与我们从(包括)开始的上下文节点具有相同数量的包含data-model="user"
div的所有后代输入元素。
从XSLT开始,您可以一次性完成此操作,因为您可以访问current()
功能,这样您就可以逃脱&#34;来自谓词
.//input[count(ancestor::div[@data-model = 'user']) =
count(current()/ancestor-or-self::div[@data-model = 'user'])]
此函数在纯XPath中不可用,但如果您的库允许您将变量绑定传递给表达式,那么您可以在变量中提供上下文节点并使用它来代替current()
。