在C#中使用节点ID解析XmlDocument

时间:2016-05-27 19:03:13

标签: c# xml xml-parsing xmldocument xmlnode

如何使用节点ID解析XML文件。我想转到<Rate>0.8988</Rate>

<rate id="USDEUR">节点
<results>
    <rate id="USDEUR">
    <Name>USD/EUR</Name>
    <Rate>0.8988</Rate>
    <Date>5/27/2016</Date>
    <Time>6:56pm</Time>
    <Ask>0.8989</Ask>
    <Bid>0.8988</Bid>
    </rate>
    <rate id="USDJPY">
    <Name>USD/JPY</Name>
    <Rate>110.1250</Rate>
    <Date>5/27/2016</Date>
    <Time>6:53pm</Time>
    <Ask>110.1500</Ask>
    <Bid>110.1250</Bid>
    </rate>
    </results>

这是我迄今为止所能做的。

string sitemapurl = @"http://example.com/xmlforexrates";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(sitemapurl);
XmlNodeList nodeIds = xmlDoc.SelectNodes("/results/rate");

现在它获得了NodeList中的所有<rate>个节点。我只想基于Id获取节点,例如<rate id="USDEUR">

请帮我这样做。感谢

2 个答案:

答案 0 :(得分:0)

使用XPath,您可以这样做:

XmlNodeList nodeIds = xmlDoc.SelectNodes("/results/rate[@id='USDEUR']/Rate/text()");

答案 1 :(得分:0)

使用LINQ to XML非常简单。

var doc = XDocument.Load("http://example.com/xmlforexrates");

var rate = (decimal)doc
    .Descendants("rate")
    .Where(x => (string) x.Attribute("id") == "USDEUR")
    .Elements("Rate")
    .Single();

有关正常工作的演示,请参阅this fiddle