Linq to XML 读取方法在 VS2017 中使用 C# 抛出 NullReferenceException

Linq to XML read method throws NullReferenceException using C# in VS2017

这是我的 XML 结构:

<root>
    <report>
        <results>
            <result>
                <name> name 1 </name>
            </result>
            <result>
                <name> name 2 </name>
            </result>
       </results>
    </report>
</root>

我想读取 result 中的信息并创建一个对象以将其属性设置为该值。这是我执行此操作的代码:

阅读自XML:

XDocument rootDocument = XDocument.Load(filePath)
var vul = from r in rootDocument.Descendants("result")
select new
{
    Name = r.Element("name").Value
};

创建新对象:

foreach(var r in vul)
{
    Object a = new Object()
    {
        Name = r.Name
    };
}

问题是这会在调用

时产生 NullReferenceException
rootDocument.Descendants("result")

提前致谢!

我猜测您的 select 正在尝试访问不存在的元素。

例如,原始 xml 中缺少 name 元素:

例如这个xml会失败

<root>
    <report>
        <results>
            <result>
                <name> name 1 </name>
            </result>
            <result>
                <name> name 2 </name>
            </result>
            <result>
                <surname> name 2 </surname> //will fail when loop gets here
            </result>
       </results>
    </report>
</root>

如果 name 元素可能不会始终存在,您可以更新代码以处理 null

var vul = from r in rootDocument.Descendants("result")
    select new
    {
        Name = r.Element("name")?.Value, //this will return null
    };

..因为 r.Name 可以为空,您需要在 for 循环中考虑到这一点。

foreach (var r in vul)
{
    string Name = r.Name ?? string.empty; 
}

我找到了这个错误的原因。我不知道为什么,但是调用元素的值会导致它。我变了

Name = r.Element("name").Value

Name= r.Element("name")