我有一个类似结构的XML,包含许多项目:
<Items>
<Item>
<Name>Item name 1</Name>
<Details>
<Detail>ABC DEF</Detail>
<Detail>GHI JKL</Detail>
</Details>
</Item>
<Item>
<Name>Item name 2</Name>
<Details>
<Detail>ABC DEF</Detail>
<Detail>GHI MNO</Detail>
</Details>
</Item>
</Items>
如何在至少一个Detail子节点中获取包含子串“MNO”的所有Item节点的列表?
此表达式不返回具有描述“Item name 2”的预期Item:
/Items/Item[contains(Details/Detail, 'MNO')]
请指教。提前谢谢了! Vojtech
答案 0 :(得分:4)
以下是工作变体:
/Items/Item[Details/Detail[contains(.,"MNO")]]
基本上,您的示例中发生了什么:仅在第一个Detail
节点中搜索“MNO”字符串进行包含。因此,如果您要将XML更改为:
<Items>
<Item>
<Name>Item name 1</Name>
<Details>
<Detail>ABC DEF</Detail>
<Detail>GHI JKL</Detail>
</Details>
</Item>
<Item>
<Name>Item name 2</Name>
<Details>
<!-- Nodes order was changed -->
<Detail>GHI MNO</Detail>
<Detail>ABC DEF</Detail>
</Details>
</Item>
</Items>
你的XPath可以正常工作。