代码之家  ›  专栏  ›  技术社区  ›  Chris Conway

需要XPath帮助

  •  1
  • Chris Conway  · 技术社区  · 14 年前

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

    如果知道名称是“Dog”,那么如何获取颜色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;
    

    我可以用一个更好的XPath表达式来得到这个结果吗?

    这需要在c#2.0中,因此很遗憾,无法支持Linq和XDocument。

    谢谢!!

    2 回复  |  直到 14 年前
        1
  •  0
  •   Abe Miessler    14 年前

    试试这个(用 ns 前缀绑定到 http://www.company.com/Global/US

    /ns:Animals/ns:Mammals/ns:Animal[ns:Type/ns:Name = 'Dog']/ns:Color/ns:R
    
        2
  •  0
  •   MooGoo    14 年前

    我对C#一无所知,但是这个xpath表达式应该能为您提供正确的节点

    //Animal[Type/Name = 'Dog']/Color/R