2011-12-09 128 views
1

我也有類似的結構包含很多項目的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

回答

4

這裏是工作的變體:

/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會正常工作。

相關問題