繁体   English   中英

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

[英]Parsing data from a child element in an xml document

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

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

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

我建议使用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;
    }

我在此处拥有此文档的方式: http : //searisen.com/xmllib/extensions.wiki

您当前可以执行以下操作:(假定离开是根节点的子节点)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM