从xml文档中的子元素解析数据

时间:2012-03-23 00:27:08

标签: c# xml

我在解析xml文档中的子元素时遇到了困难。

该文件包含一系列元素,其中包含我需要从中提取欧元价格的定价信息。无论我做什么,我似乎无法提取我需要的数据。结果始终为null。

<departure>
    <pricing xmlns="http://website.com/api/feeds/xmlns/20110926/">
      <price age_group="Adult" label="1 Adult" max_age="100" max_passengers="100" min_age="12" min_passengers="1">
        <USD>4249.00</USD>
        <AUD>4299.00</AUD>
        <CHF>3649.00</CHF>
        <GBP>2749.00</GBP>
        <NZD>5399.00</NZD>
        <CAD>4399.00</CAD>
        <EUR>3249.00</EUR> <------------this is what I need to parse
      </price>
    </pricing>
    <pricing xmlns="http://website.com/api/feeds/xmlns/20110926/">
      <price age_group="Adult" label="1 Adult" max_age="100" max_passengers="100" min_age="12" min_passengers="1">
        <USD>4249.00</USD>
        <AUD>4299.00</AUD>
        <CHF>3649.00</CHF>
        <GBP>2749.00</GBP>
        <NZD>5399.00</NZD>
        <CAD>4399.00</CAD>
        <EUR>3249.00</EUR> <------------this is what I need to parse
      </price>
    </pricing>
<departure>


XmlNodeList departureNodes = xmlDoc.GetElementsByTagName("departure");
if (departureNodes.Count > 0)
{
    foreach (XmlElement element in departureNodes)
    {
        string priceInEUR = xmlElement.SelectSingleNode("pricing/price/EUR"); // returns null
        string priceInEUR2 = xmlElement.SelectSingleNode("//pricing/price/EUR"); // also returns null
    }
}

2 个答案:

答案 0 :(得分:0)

我建议将XDocument和Linq用于XML。

using System.Xml.Linq;

IEnumerable<XElement> prices = from t in doc.Root.Descendants("EUR");
    foreach (XElement t in prices)
    {
        string priceInEUR = t.Value;
    }

答案 1 :(得分:0)

我在这里有这个文件的方式:http://searisen.com/xmllib/extensions.wiki

您目前可以:(假设离开是根节点的子节点)

decimal[] euros = XElement.Load(xmlFile)
              .GetEnumerable("departure/pricing",
                 x => x.Get("price/EUR", decimal.MinValue))
              .ToArray();

这将获得所有欧元,即您列出的两个欧元。