如何处理具有相同后代名称的XML?

时间:2013-05-25 05:36:42

标签: c# xml linq-to-xml

我有一个不幸的问题,根元素和后代元素的名称是相同的,第二个有更多信息的后代。示例如下:

<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);

我该如何处理?

1 个答案:

答案 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>