给出以下Xml:
<Animals xmlns="http://www.company.com/Global/US">
<Mammals>
<Animal>
<Type>
<Name>Cat</Name>
<Breed>Ally Cat</Breed>
</Type>
<Color>
<R>0</R>
<G>0</G>
<B>0</B>
</Color>
</Animal>
<Animal>
<Type>
<Name>Dog</Name> <-- I know this
<Breed>Weimeraner</Breed>
</Type>
<Color>
<R>190</R> <- I need the value of this
<G>190</G>
<B>190</B>
</Color>
</Animal>
<Mammals>
</Animals>
如果我知道Name是“Dog”,我怎样才能获得Color的R节点的整数值?
以下内容对我不起作用。
var xmlDoc = new XmlDocument(xml);
var nsm = new XmlNamespaceManager(_xmlDoc.NameTable);
nsm.AddNamespace("ns", "http://www.company.com/Global/US");
var typeNode = xmlDoc.SelectSingleNode("/ns:Animals/ns:Mammals/ns:Animal/ns:Type/ns:Name[. = 'Dog']", nsm);
var r_val = typeNode.ParentNode.ParentNode.SelectSingleNode("/ns:Color/ns:R", nsm).InnerText;
此代码中的typeNode为我提供了正确的节点,但随后遍历祖父节点并在其中进行选择会使我为null,因此InnerText会爆炸。
我可以使用更好的XPath表达式来获取它吗?
这需要在c#2.0中,所以不幸的是Linq和XDocument无法得到支持。
谢谢!
答案 0 :(得分:0)
尝试此操作(绑定到ns
命名空间URI的http://www.company.com/Global/US
前缀):
/ns:Animals/ns:Mammals/ns:Animal[ns:Type/ns:Name = 'Dog']/ns:Color/ns:R
答案 1 :(得分:0)
我对C#一无所知,但是这个xpath表达式应该能为你提供正确的节点
//Animal[Type/Name = 'Dog']/Color/R