【发布时间】:2013-05-13 17:44:02
【问题描述】:
我有一个 C# 应用程序,需要从 Linq to XML 集合中提取多个元素。
我有以下 XML 文件的摘录
<SNS>
<uniqueSystem><system>49</system><label>Engines</label>
<uniqueSubsystem><subsystem>30</subsystem><label>APU</label>
<uniqueUnit><unit>00</unit><label>Starter</label>
</uniqueUnit>
</uniqueSubsystem>
</uniqueSystem>
<uniqueSystem><system>50</system><label>Hydraulics</label>
<uniqueSubsystem><subsystem>30</subsystem><label>Reservoir</label>
<uniqueUnit><unit>00</unit><label>Pump</label>
</uniqueUnit>
</uniqueSubsystem>
</uniqueSystem></SNS>
我需要从每个“uniqueSystem”元素中提取值。因此,在上面的示例中,在“SNS”元素下有 2 个“uniqueSystem”元素,每个元素中都有“uniqueSubsystem”元素和“uniqueUnit”元素,每个元素都带有“label”元素。我需要提取这些数据来构建 TreeView。
我的问题是使用 Linq 提取多个元素。我该怎么做?
我现在有
var item = from items in doc.Descendants("SNS").Descendants("uniqueSystem").Descendants("system")
orderby items.Value
select items.Descendants("uniqueSystem");
我认为这会给我一个“uniqueSystem”元素的集合,我现在需要从中提取多个元素的值。有人可以帮忙吗?
我的下一个 attmpt 如下,但这给了我一个空引用异常:
var item = from items in doc.Descendants("SNS").Descendants("uniqueSystem").Descendants("system")
orderby items.Value
select items.Descendants("uniqueSystem");
foreach (var e in item)
{
string sys = e.Descendants("system").FirstOrDefault().Value;
string sysLabel = e.Descendants("system").Descendants("label").FirstOrDefault().Value;
string subsys = e.Descendants("subsystem").FirstOrDefault().Value;
string subsysLabel = e.Descendants("subsystem").Descendants("label").FirstOrDefault().Value;
string unit = e.Descendants("unit").FirstOrDefault().Value;
string unitLabel = e.Descendants("unit").Descendants("label").FirstOrDefault().Value;
buildSystemNodes(sys, sysLabel);
//getSubSystems(myitem);
}
【问题讨论】:
-
想使用
XmlSerializer?因为我只知道XmlSerializer -
@Fendy - 我从来没有用过,这是一个解决方案吗?
-
@Daedalus 看看
System.Xml.Serialization.XmlSerializer类。 MSDN:msdn.microsoft.com/en-us/library/… -
你需要访问节点
对吗?
标签: c# xml linq-to-xml