C# Linq to XML读取方法在VS2017中使用C抛出NullReferenceException
这是我的XML结构: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>
<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")