我有这个简单的DOM:
<r>
<a1>
<foo>...</foo>
<foo>...</foo>
<foo>...</foo>
</a1>
<a2>
<faa>...</faa>
<faa>...</faa>
<foo>...</foo>
</a2>
<a3>
<fii>...</fii>
<fii>...</fii>
<fii>...</fii>
</a3>
</r>
是否只有XPath可以选择仅包含aX
个子元素的元素a1
(在此示例中为元素foo
)?
答案 0 :(得分:2)
此XPath,
//*[foo][not(*[not(self::foo)])]
选择所有具有foo
个子元素 而没有其他子元素 的元素。
//*
选择文档中的所有元素//*[foo]
...至少具有一个foo
子元素//*[foo][not(*[not(self::foo)])]
...并且 not 的子元素不是 not foo
。由于我们已经确定必须存在一个foo
子元素,因此通过添加不存在不是foo
子元素的其他元素,我们保证存在foo
<按要求,strong> 并且仅 foo
个子元素。答案 1 :(得分:1)
使用此XPath获取所有具有“ foo”元素作为子元素的元素
//*[foo]
答案 2 :(得分:0)
要完成@kjhughes的回答,请使用两个有效的XPath:
//foo[count(preceding-sibling::*)=count(preceding-sibling::foo)]/..
//*[starts-with(name(),"a")][count(.//*)=count(.//foo)]
输出:
<a1>
<foo>...</foo>
<foo>...</foo>
<foo>...</foo>
</a1>