2011-08-17 83 views
2

我有這樣的XML文件:C#XPATH選擇屬性,其中子節點內的文本是

<?xml version="1.0" encoding="UTF-8"?> 
<karteikasten> 
    <vokabel stufe="1"> 
    <eng> 
     <item>Hi</item> 
     <item>Hello</item> 
    </eng> 
    <de> 
     <item>Hallo</item> 
     <item>Moin</item> 
    </de> 
    </vokabel> 
    <vokabel stufe="1"> 
    <eng> 
     <item>Eating</item> 
    </eng> 
    <de> 
     <item>Essen</item> 
     <item>Mampfen</item> 
    </de> 
    </vokabel> 
</karteikasten> 

我要選擇屬性「stufe」,其中<item>是「你好」,「你好」或什麼的。我有這個代碼,它的工作原理如下:

XPathDocument document = new XPathDocument(@"C:\test.xml"); 
XPathNavigator navigator = document.CreateNavigator(); 

XPathExpression expression; 
expression = navigator.Compile("/karteikasten/vokabel[eng/item]/@stufe"); 
XPathNodeIterator iterator = navigator.Select(expression); 

while (iterator.MoveNext()) 
{ 
    XPathNavigator navigator2 = iterator.Current.Clone(); 
    Console.WriteLine(navigator2.Value); 
} 

但是這會在整個文檔中選擇每個「stufe」。

expression = navigator.Compile("/karteikasten/vokabel[eng/item='Hi']/@stufe"); 

不起作用。什麼是正確的模式來獲得我想要的?

+0

表達= navigator.Compile( 「/ karteikasten/vokabel [ENG /項= '嗨']/@ stufe」);適用於我。你在什麼版本的.NET上? – Damian 2011-08-17 12:28:08

回答

4

在一些解析器,書面表達你將實際工作。在.NET中,我相信你需要使用text()功能,如:

/karteikasten/vokabel[eng/item/text()='Hi']/@stufe 
0

嘗試:

expression = navigator.Compile("/karteikasten/vokabel[eng/item='Hi' and @stufe='1']/@stufe"); 

應該工作

相關問題