XElement.Root.Element一直返回null

本文关键字:返回 null 一直 Element Root XElement | 更新日期: 2023-09-27 18:26:50

我正在学习C#,并试图在发布后的代码后面展开XML

var doc = XDocument.Load("test.xml");
XNamespace ns = "mynamespace";
var member = doc.Root.Element(ns + "member");
// This will *sort* of flatten, but create copies...
var descendants = member.Descendants().ToList();
// So we need to strip child elements from everywhere...
// (but only elements, not text nodes). The ToList() call
// materializes the query, so we're not removing while we're iterating.
foreach (var nested in descendants.Elements().ToList())
{
    nested.Remove();
}
member.ReplaceNodes(descendants);

这是我的XML(抱歉,我不知道如何发布花哨的代码风格)

<ApplicationExtraction>
    <IsCurrent>Yes</IsCurrent>
    <ApplicationDate>10/06/2015</ApplicationDate>
    <Status>Application Received</Status>
    <EquipmentType>Equipment</EquipmentType>
    <IsLoan>No</IsLoan>
</ApplicationExtraction>

有名称空间,所以我将var member = doc.Root.Element(ns + "member");更改为var member = doc.Root.Element("ApplicationExtraction");,但返回NULL。

我也尝试了XElement sRoot = doc.Root.Element("ApplicationExtraction");从这个帖子我仍然得到相同的结果。

我读了Microsoft XElement文档,但不知道如何解决这个问题。

我可能做错了什么?

XElement.Root.Element一直返回null

XElement sRoot = doc.Root.Element("ApplicationExtraction");

将在根目录中查找元素"ApplicationExtraction"。如果你想要根,只需参考

doc.Root

在您的XML中,doc.Root是根节点,即ApplicationExtraction,而根节点内没有节点ApplicationExtraction,因此您将获得null。

要获取您需要的任何特定节点(例如):-

XElement member = doc.Root.Element("IsCurrent");

并获取节点内部的值:-

string member = (string)doc.Root.Element("IsCurrent");