如何选择在子节点中包含特定子字符串的节点?

问题描述:

我也有类似的结构包含很多项目的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会正常工作。