C# XDocument子体正在抛出空引用
我有这样一个XML文档:C# XDocument子体正在抛出空引用,c#,xml,linq,xelement,C#,Xml,Linq,Xelement,我有这样一个XML文档: <?xml version="1.0" encoding="utf-8"?> <Settings updated="3/21/2017 15:48"> <Setting name="ToolTipVariables"><?xml version="1.0" encoding="utf-16"?> <ArrayOfString xmlns:xsi="http://www.w3.org/200
<?xml version="1.0" encoding="utf-8"?>
<Settings updated="3/21/2017 15:48">
<Setting name="ToolTipVariables"><?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>Title</string>
<string>Date</string>
<string>Description</string>
<string>Location</string>
<string>Id</string>
</ArrayOfString></Setting>
<Setting name="ToolTipVariables"><?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>Title</string>
<string>Date</string>
<string>Description</string>
<string>Location</string>
<string>Id</string>
</ArrayOfString></Setting>
<Setting name="ToolTipVariables"><?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>Title</string>
<string>Date</string>
<string>Description</string>
<string>Location</string>
<string>Id</string>
</ArrayOfString></Setting>
<Setting name="ShowUpdateWindow"><?xml version="1.0" encoding="utf-16"?>
<boolean>true</boolean></Setting>
</Settings>
XDocument document = XDocument.Load(settingsPath); //settingsPath is where the XML Document is located
XElement element = document.Descendants("Settings").Where(x => x.Attribute("name").Value == "ToolTipVariables").FirstOrDefault();
但在尝试获取FirstOrDefault时,它会不断抛出null引用异常。也许我在某个地方犯了个简单的错误,但我找不到。任何帮助都将不胜感激 问题是您正在选择名为
设置
(实际上是根节点)的所有元素。代码文档。子体(“设置”)
将为您提供元素名称为设置
的文档的所有子体。我认为您真正想要的是所有设置元素。这将有助于:
XElement element = document.Descendants("Setting")
.Where(x => x.Attribute("name").Value == "ToolTipVariables")
.FirstOrDefault();
显然,在某些情况下,x.Attribute(“name”)
必须为null,因此您需要Where(x=>(string)x.Attribute(“name”)==“ToolTipVariables”)
Ah-这是一个愚蠢的错误;)。我把“后代”理解为“这个的后代”,而不是“命名为这个的后代”。非常感谢。