Select 全部,但不包括某些子孩子

Select all but exclude certain subchildren

我只是想从我的 xpath select 中排除某个元素(在示例中,exclude),但是我的 xpath 不工作。

XML

 <root>
      <x>
        <y>
          <z>
            <exclude me="please"></exclude>
          </z>
        </y>
      </x>
      <x>
        <y>
          <z>
            <exclude me="please"></exclude>
          </z>
        </y>
      </x>
    </root>


XPath:
/*[not(self::exclude)] Returns 整个 XML
/*[node()!=exclude] Returns 整个 XML
/root//x//y//z/*[not(self::exclude)](这实际上是 return 我不想要的节点)
+ 更多迭代

我希望 return 结果为:

    <root>
      <x>
        <y>
          <z>
          </z>
        </y>
      </x>
      <x>
        <y>
          <z>
          </z>
        </y>
      </x>
    </root>

至少我想 select 除了 me 属性。这可能吗?我开始得出事实并非如此的结论。谢谢。


BizTalk 代码:

construct msgException{
msgException = msgReservationMultiPartIn.NewMessagePart;
xpath(msgException,"//*[not(self::exclude)]");
}

首先,如果http://codebeautify.org/Xpath-Tester return是exclude元素节点作为

的结果
/root//x//y//z/*[not(self::exclude)]

你不应该再使用它。此外,如您所见,其他三个站点 return 什么也没做。


我会说您的 XPath 表达式是明智的(好吧,其中一些是)。但是您看不太清楚 - 因为会发生以下情况:使用像

这样的表达式
//*[not(self::exclude)]

exclude节点确实根本没有选中。 但是:那些在线测试人员 return 结果节点及其所有内容,因此像 /root 这样的简单表达式会产生整个 XML 文件(至少http://xpath.online-toolz.com/tools/xpath-editor.php).

对于表达式 //*[not(self::exclude)] 相同的 XPath 测试器 returns:

<root>
<x>
<y>
<z>
<exclude me="please"/>
</z>
</y>
</x>
<x>
<y>
<z>
<exclude me="please"/>
</z>
</y>
</x>
</root>
-----------------------
<x>
<y>
<z>
<exclude me="please"/>
</z>
</y>
</x>
-----------------------
<y>
<z>
<exclude me="please"/>
</z>
</y>
-----------------------
<z>
<exclude me="please"/>
</z>
-----------------------
<x>
<y>
<z>
<exclude me="please"/>
</z>
</y>
</x>
-----------------------
<y>
<z>
<exclude me="please"/>
</z>
</y>
-----------------------
<z>
<exclude me="please"/>
</z>

单个结果由 -------- 分隔,并且如您所见,exclude 节点不会单独出现在结果中 - 就像其父节点和节点的副产品一样祖先被选中并 returned.

什么意思?

在您使用 XPath 的环境中并行开发您的 XPath 表达式(在您的情况下,如果我理解正确的话,是 Biztalk)。然后,如果 return 编辑了错误的元素,请返回此处,post 完整代码并获得帮助。