我想从以下XML获取A标签和B标签,但我想删除第二个A标签:
......many other tags.
<A>abc</A>
<A> <<==== I want to remove this A tag from result.
<B>def
<A>foo</A>
<A>hoge</A>
<A>bar</A>
</B>
</A>
.......
我正在使用此XPath:
//*[self::A[not(descendant::B) or self::B]]
然而,这个XPath两次得到B标签的内部A标签:
<A>abc</A>
<B>def
<A>foo</A>
<A>hoge</A>
<A>bar</A>
</B>
<A>foo</A>
<A>hoge</A>
<A>bar</A>
然后,我写了这个Xpath,但它不起作用:
//*[self::A[not(descendant::B or ancestor::B) or self::B]]
我想得到这个结果:
<A>abc</A>
<B>def
<A>foo</A>
<A>hoge</A>
<A>bar</A>
</B>
.......
我该如何解决这个问题?
答案 0 :(得分:0)
尝试使用以下XPath
表达式:
//*[self::A[not(./B) and not(./parent::B)] or self::B]
输出:
'<A>abc</A>'
'<B>def
<A>foo</A>
<A>hoge</A>
<A>bar</A>
</B>'
self::A[not(./B) and not(./parent::B)]
表示没有直接子级或父级A
元素的B