需要XPath帮助

时间:2010-11-01 18:52:53

标签: c# xpath

给出以下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无法得到支持。

谢谢!

2 个答案:

答案 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