我有这个XML文件:
<?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
&gt;是“嗨”,“你好”或其他什么。我有这个代码,有效:
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 :(得分:4)
在某些解析器中,您的表达式实际上将按写入方式工作。在.NET中,我认为您需要使用text()
函数,如:
/karteikasten/vokabel[eng/item/text()='Hi']/@stufe
答案 1 :(得分:0)
尝试:
expression = navigator.Compile("/karteikasten/vokabel[eng/item='Hi' and @stufe='1']/@stufe");
应该有效