1

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

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

我应该如何处理?

4

1 回答 1

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>
于 2013-05-25T05:54:42.203 回答