Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq to XML读取方法在VS2017中使用C抛出NullReferenceException_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

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

C# Linq to XML读取方法在VS2017中使用C抛出NullReferenceException,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,这是我的XML结构: <root> <report> <results> <result> <name> name 1 </name> </result> <result> <name> name 2 </name>

这是我的XML结构:

<root>
    <report>
        <results>
            <result>
                <name> name 1 </name>
            </result>
            <result>
                <name> name 2 </name>
            </result>
       </results>
    </report>
</root>
创建新对象:

问题是,调用时会产生NullReferenceException

rootDocument.Descendants("result")

提前谢谢你

我猜您的select正在尝试访问一个不存在的元素

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

e、 g.此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>
..由于r.Name可以为null,您需要在for循环中对此进行说明

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

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

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


我用你的xml尝试了你的代码,它对我来说很好。你检查了文件路径了吗,rootDocuments是否可能返回null?已经检查过了,rootDocument返回了它应该返回的内容@HSNBLTH这段代码对我来说很好-你从一个大的代码库中减少了这段代码吗?您是否有在select中设置的其他属性?我减少了发布的XML文件,因为它要大得多@我查过了。代码停止使用第一个文件,第一个文件肯定在那里。您可能需要添加原始xml文件和代码,因为您添加的代码和xml没有问题。我无法上载任何原始内容。但是知道我的代码是有效的会有很大帮助。我需要遍历xml并搜索任何错误。谢谢大家!@托马斯:请注意,如果元素隐式地位于名称空间中,那么您也需要在元素调用中指定该名称空间。这很可能就是问题所在。请注意,您不必显示真实的原始内容,但应包括一个具有代表性的示例。在导致先前失败的情况下,该示例仍将为空。您只是通过不尝试访问空引用上的属性来避免异常。没错。适当的异常处理也可以完成这项工作。
var vul = from r in rootDocument.Descendants("result")
    select new
    {
        Name = r.Element("name")?.Value, //this will return null
    };
foreach (var r in vul)
{
    string Name = r.Name ?? string.empty; 
}
Name = r.Element("name").Value
Name= r.Element("name")