在 C# 中从 XML 中删除所有子节点元素?



我有以下XML结构:

.XML

<?xml version="1.0" encoding="utf-8" ?>
<Users>
</Users>

在某些时候,<Users>被不同的用户填满,但我希望能够在一个简单的函数中将它们全部删除。

尝试

/// <summary>
/// Removes all nodes from XML creds file on application close
/// </summary>
public static void RemoveXMLData()
{
string xmlPath = Path.Combine(Environment.CurrentDirectory, @"DataCredential.xml");
XDocument document = XDocument.Load(xmlPath);
document.RemoveNodes();
}

这似乎不起作用。我还做了以下工作:

尝试 #2

string xmlPath = Path.Combine(Environment.CurrentDirectory, @"DataCredential.xml");
XDocument document = XDocument.Load(xmlPath);
foreach (var node in document.Descendants("Users"))
{
node.Remove();
}

但这会产生异常错误。

归根结底,我只想使用以下文件数据回到原点:

<?xml version="1.0" encoding="utf-8" ?>
<Users>
</Users>

这应该可以正常工作:

XDocument document = XDocument.Load(xmlPath);
document.Descendants("Users").Elements().Remove();

正如@Cory所建议的,替代和更快的方法是:

document.Root.Elements().Remove();

当您迭代从中删除的集合时,它可能会在第二次尝试时爆炸。 试试这个。

string xmlPath = Path.Combine(Environment.CurrentDirectory, @"DataCredential.xml");
XDocument document = XDocument.Load(xmlPath);
var nodes = document.Descendants("Users");
while(nodes.Count > 0)
{
nodes[0].Remove();
}

最新更新