如何选择在子节点中包含特定子字符串的节点?
问题描述:
我也有类似的结构包含很多项目的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”所有项目的节点列表?
这种表达不说明 “项目名称2” 返回预期的项目:
/Items/Item[contains(Details/Detail, 'MNO')]
请指教。提前谢谢了! Vojtech
答
这里是工作的变体:
/Items/Item[Details/Detail[contains(.,"MNO")]]
基本上,在你的例子发生了什么事:在“MNO”的字符串中搜索仅在第一Detail
节点遏制。因此,如果您要将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会正常工作。