2012-11-25 76 views
1

我有下面的XML:的XPath包含兩個節點

<Root> 
<Level> 
    <Name>John</Name> 
    <Key>Lennon</Key> 
    <Value> 
     <Val>1</Val> 
    </Value> 
</Level> 
<Level> 
    <Name>Fred</Name> 
    <Key>Hi</Key> 
    <Value> 
     <Val>2</Val> 
    </Value> 
</Level> 
</Root> 

我需要將使用「包含」有關名稱一個關鍵的XPath。

預期結果是'Value/Val'。

對於輸入:名稱 - 約翰,鑰匙 - 列儂

我預計:1

回答

1

使用

/*/*[Name='John'][Key='Lennon']/Value/Val 

這選擇任何Val元素,它是y Value元素是子元素的子元素Name,字符串值爲字符串「John」,並且子元素爲Key,字符串值爲字符串「Lennon :,並且(Value的父元素)是子元素XML文檔的頂層元素。

如果你只需要的選擇Val元素,使用字符串值:

string(/*/*[Name='John'][Key='Lennon']/Value/Val) 

除此之外,如果已知任何Val值是一個數字,使用:

number(/*/*[Name='John'][Key='Lennon']/Value/Val) 
1

我認爲這將這樣的伎倆

/Root/Level[Name[1] = "John" and Key[1] = "Lennon"]/Value/Val[1] 
+0

是的,除非你可以放棄所有三個「[1]」謂詞。我說「可能」是因爲我們對可能的輸入不是很瞭解。 –

+0

謝謝@MichaelKay。你知道,我通常在SQL Server MS中測試XPath,而SQL有它自己的XPath子集。你知道一些測試XPath的好方法,比如sqlfiddle.com for SQL或者jsfiddle.com for javascript? –

+1

@RomanPekar,一個很好的(不僅因爲我寫了它:))使用的工具是XPath Visualizer。它是完全免費和開源的,可以在這裏獲得:http://www.huttar.net/dimitre/XPV/TopXML-XPV.html –

相關問題