我有一个不幸的问题,根元素和后代元素的名称是相同的,第二个有更多信息的后代。示例如下:
<dispatchnames>
<dispatchnames>
<first>mike</first>
<last>allison</last>
</dispatchnames>
<dispatchnames>
<first>jeff</first>
<last>ellington</last>
</dispatchnames>
</dispatchnames>
我正在尝试使用C#编写代码,这是我当前的XML代码,但没有相同的名称:
XDocument xdoc = XDocument.Parse(xmlString);
IEnumerable<TrackData> data = from info in xdoc.Descendants("dispatchnames")
select new TrackData(
info.Element("first").Value,
info.Element("last").Value);
我该如何处理?
答案 0 :(得分:1)
添加where
子句以验证该元素不是根元素。如果该元素实际上不是根,请检查info.Element("first") != null
而不是
XDocument xdoc = XDocument.Parse(xmlString);
IEnumerable<TrackData> data = from info in xdoc.Descendants("dispatchnames")
where xdoc.Root != info
select new TrackData(
info.Element("first").Value,
info.Element("last").Value);
另请注意,您发布的XML格式不正确。我用XML结构测试了这个结构如下:
<dispatchnames>
<dispatchnames>
<first>mike</first>
<last>allison</last>
</dispatchnames>
<dispatchnames>
<first>jeff</first>
<last>ellington</last>
</dispatchnames>
</dispatchnames>