<?xml version="1.0" encoding="utf-8" ?>
<menu>
<group Text="Group1">
<item Text="Menu1" />
<item Text="Menu2" Authenticated="0" />
<item Text="Menu3" />
</group>
<group Text="Group2" Authenticated="1">
<item Text="Menu4" />
<item Text="Menu5" />
<item Text="Menu6" />
</group>
<group Text="Group3" Authenticated="0">
<item Text="Menu7" />
<item Text="Menu8" />
<item Text="Menu9" />
</group>
</menu>
在上面的xml中,我希望返回包含子节点(项元素)的所有组元素,而不是那些具有Authenticated等于'0'
属性的组元素。结果应该是这样的:
<group Text="Group1">
<item Text="Menu1" />
<item Text="Menu3" />
</group>
<group Text="Group2" Authenticated="1">
<item Text="Menu4" />
<item Text="Menu5" />
<item Text="Menu6" />
</group>
*编辑:我尝试过以下xpath
/menu/group[not(@Authenticated) or @Authenticated = '1'][item[not(@Authenticated) or @Authenticated = '1']]
但它返回元素
<item Text="Menu2" Authenticated="0" />
我不希望在结果中。
答案 0 :(得分:0)
我认为XPath没有一种方法能够准确地获得您正在寻找的内容,但如果您只是获得了经过身份验证的项目组,那该怎么办呢?
/menu/group/item[@Authenticated!='0' or not(@Authenticated)]
并取回这样的东西?
<menu>
<item Text="Menu1"/>
<item Text="Menu3"/>
<item Text="Menu4"/>
<item Text="Menu5"/>
<item Text="Menu6"/>
<item Text="Menu7"/>
<item Text="Menu8"/>
<item Text="Menu9"/>
</menu>
<强>更新强>
啊,我想我明白你的目标是什么。试试这个:/menu/group/item[(@Authenticated!='0' or not(@Authenticated)) and (../@Authenticated!='0' or not(../@Authenticated))]
你应该得到:
<menu>
<item Text="Menu1"/>
<item Text="Menu3"/>
<item Text="Menu4"/>
<item Text="Menu5"/>
<item Text="Menu6"/>
</menu>
答案 1 :(得分:0)
我不认为这在纯XPath中是可能的,至少不是XPath 1.我可能只是克隆XML并运行XPath来删除// * [@ Authenticated = 0],留下你想要的结果但是通过更迂回的方法。