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 完整代码并获得帮助。
我只是想从我的 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 完整代码并获得帮助。