我有一个xml文件,其中包含具有相同name元素的typedef枚举和纯枚举。我想通过使用xpath语句的属性消除它们的歧义。我必须使用xpath1.0。
我已经尝试了几种现有的答案,但是似乎没有一个答案能回答我的歧义问题。例: How do I identify duplicate nodes in XPath 1.0 using an XPathNavigator to evaluate?
我尝试了以下语句,希望消除重复,但它似乎不起作用,无论如何也不会消除节点歧义:
/*/*/member[name = following-sibling::member/name and not(name = preceding-sibling::member/name)]
我的xml示例:
<member kind="enum"><name>myEnum</name></member>
<member kind="typedef"><name>myEnum></name></member>
所需结果: 当名称元素重复时,我要提取typedef枚举而不是普通枚举。
答案 0 :(得分:0)
例如:
如果您将以下XML作为输入文件
<a class="my-class">
<c>
<member kind="enum">
<name>myEnum111</name>
</member>
<member kind="typedef">
<name>myEnum444></name>
</member>
</c>
<d>
<member kind="enum">
<name>myEnum222</name>
</member>
</d>
<d>
<member kind="whatever">
<name>myEnum666</name>
</member>
<member kind="else">
<name>myEnum777</name>
</member>
<member kind="typedef">
<name>myEnum000</name>
</member>
<member kind="itmaybe">
<name>myEnum999</name>
</member>
</d>
</a>
及以下作为XPath-1.0表达式
/*/*/member[(count(../member) = 1 and contains(name,'myEnum')) or (count(../member) > 1 and @kind='typedef')]
它将为您提供此(正确)输出:
<?xml version="1.0"?>
<member kind="typedef">
<name>myEnum444></name>
</member>
<member kind="enum">
<name>myEnum222</name>
</member>
<member kind="typedef">
<name>myEnum000</name>
</member>
这是
所要求的输出[...]复制名称元素时,我要提取
typedef
枚举而不是普通枚举。
如果有多个typedef
属性节点,则该行为未定义((可能)返回第一个)。