2011-08-17 84 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"); 

应该工作

相关问题