也许有人可以帮助解决我遇到的问题。我有这个XML数据:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<header>
<version>3.1</version>
<date>2013-04-02</date>
<filedate>2013-04-02</filedate>
</header>
<value>
<TypeId>67772764</TypeId>
<ServiceID>GN1600</ServiceID>
<EvbAsof>2013-04-02</EvbAsof>
<Rating>2</Rating>
<AdditionalColumns>
<Name>EvbAvg</Name>
<Value>7.29495</Value>
</AdditionalColumns>
<AdditionalColumns>
<Name>EvbHigh</Name>
<Value>12.46</Value>
</AdditionalColumns>
<AdditionalColumns>
<Name>EvbLow</Name>
<Value>2.88563</Value>
</AdditionalColumns>
<AdditionalColumns>
<Name>EvbBench</Name>
<Value>1.86241</Value>
</AdditionalColumns>
</value>
... ...
我需要为每个节点提取以下数据:
我设法获得TypeID,ServiceID和Rating,但我无法弄清楚如何从头部获取日期,并从同一查询中的AditionalColumns节点获取EvbAvg和EvbBench。 到目前为止,这是我的代码:
var ServiceDesc = from c in XElement.Load("download.xml").Elements("value")
select new
{
TypeID = c.Element("TypeId").Value,
ServiceID = c.Element("ServiceID").Value,
Rating = c.Element("Rating").Value
}
如果有人能帮助我,我会非常感激。 非常感谢!
答案 0 :(得分:0)
假设您有一个header
元素和一个value
元素,那么将它们作为集合访问它们的目的可能很小(如果每个元素有多个实例,我们如何匹配它们? )。
你可以按照以下方式尝试:
var doc = XElement.Load("download.xml");
var header = doc.Elements("header").Single();
var val = doc.Elements("value").Single();
var serviceDesc = new
{
Date = DateTime.Parse(header.Element("date").Value,
System.Globalization.CultureInfo.InvariantCulture),
TypeID = val.Element("TypeId").Value,
ServiceID = val.Element("ServiceID").Value,
Rating = val.Element("Rating").Value,
EbvAvg = val.Descendants("AdditionalColumns")
.Where(node => node.Descendants("Name").Single().Value == "EvbAvg")
.Select(node => node.Descendants("Value").Single().Value)
.Single(),
EbvBench = val.Descendants("AdditionalColumns")
.Where(node => node.Descendants("Name").Single().Value == "EvbBench")
.Select(node => node.Descendants("Value").Single().Value)
.Single()
};
答案 1 :(得分:0)
最后,我设法让文件供应商以更友好的方式更改格式。谢谢大家!