鉴于此XML:
WITH
为什么/订单/订单[项目[@name =' 123']]会返回:
<Orders>
<Order>
<Item name="xyz"/>
</Order>
<Order>
<Item name="123"/>
</Order>
</Orders>
但是/订单[订单[项目[@name =&#39; 123&#39;]]]返回:
<Order>
<Item name="123" />
</Order>
在第二种情况下,名称上的匹配将被忽略。
我需要什么XPath才能回来:
<Orders>
<Order>
<Item name="xyz" />
</Order>
<Order>
<Item name="123" />
</Order>
</Orders>
答案 0 :(得分:2)
第二个例子返回它的原因是因为你的表达式
/Orders[Order[Item[@name='123']]]
表示:
Orders
节点Order
nmde Item
节点Item
个节点的属性name
的值为123
请注意,您专注于Orders
节点,这就是返回的内容,即整个 Orders
节点。
源文档中不存在您想要的内容,因此您要求进行转换。我的XPath有些生疏,但我不相信XPath本身就能做到这一点。您可能需要使用XSLT将XML转换为您需要的。
答案 1 :(得分:0)
简短的回答是,鉴于发布的XML,您无法使用XPath获得该输出。
XPath用于定位XML的一部分(尤其是XPath 1.0)。请注意,开始标记,内容和相应的结束标记被视为一个单元,即元素节点。因此,只包含一个您希望返回的<Orders>
子元素的<Order>
元素不是原始XML的一部分,因此无法使用XPath返回。
XPath是一种用于处理XML文档部分的语言,旨在供XSLT和XPointer使用。 [参考:XPath 1.0 Spec]