XML:/A/B或/A
我想得到所有A没有B孩子的节点.
我试过了
/A[not(B)]
/A[not(exists(B))]
Run Code Online (Sandbox Code Playgroud)
没有成功
/*[local-name()="A" and .... ]如果可能的话,我更喜欢带语法的解决方案.有效的想法吗?
澄清.xml看起来像:
<WhatEver>
<A>
<B></B>
</A>
</WhatEver>
Run Code Online (Sandbox Code Playgroud)
要么
<WhatEver>
<A></A>
</WhatEver>
Run Code Online (Sandbox Code Playgroud)
ala*_*mar 46
也许
*[local-name() = 'A' and not(descendant::*[local-name() = 'B'])]?
此外,应该只有一个根元素,所以/A[...]你要么得到所有的XML,要么没有.也许//A[not(B)]还是/*/A[not(B)]?
我真的不明白为什么/A[not(B)]不适合你.
~/xml% xmllint ab.xml
<?xml version="1.0"?>
<root>
<A id="1">
<B/>
</A>
<A id="2">
</A>
<A id="3">
<B/>
<B/>
</A>
<A id="4"/>
</root>
~/xml% xpath ab.xml '/root/A[not(B)]'
Found 2 nodes:
-- NODE --
<A id="2">
</A>
-- NODE --
<A id="4" />
Run Code Online (Sandbox Code Playgroud)
Ser*_*hiy 15
试试这个"/A[not(.//B)]"或者这个"/A[not(./B)]".
Ant*_*nes 10
第一个/导致XPath从文档的根开始,我怀疑这是你的意图.
也许你的意思是// [不是(B)]会在文档中找到没有直接B子级的任何级别的所有A节点.
或者您可能已经在包含A节点的节点上,在这种情况下,您只需要A [not(B)]作为XPath.