我有一个类似结构的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>
如何获得至少在其详细信息子节点之一中包含子字符串“ MNO”的所有Item节点的列表?
此表达式不返回带有描述“项目名称2”的预期项目:
/Items/Item[contains(Details/Detail, 'MNO')]
请指教。提前谢谢了! Vojtech
最佳答案
这是工作变体:/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可以正常工作。
关于xml - 如何在子节点中选择包含某个子字符串的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8444948/