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

从C#中的XML中删除所有子节点元素?,c#,xml,visual-studio,C#,Xml,Visual Studio,我有以下XML结构: XML 但这会产生一个异常错误 在一天结束时,我只想用以下文件数据回到起点: <?xml version="1.0" encoding="utf-8" ?> <Users> </Users> 当您迭代从中删除的集合时,它可能在第二次尝试时爆炸。试试这个 string xmlPath = Path.Combine(Environment.CurrentDirectory, @"Data\Cr

我有以下XML结构:

XML 但这会产生一个异常错误

在一天结束时,我只想用以下文件数据回到起点:

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

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

    string xmlPath = Path.Combine(Environment.CurrentDirectory, @"Data\Credential.xml");
    XDocument document = XDocument.Load(xmlPath);

    var nodes = document.Descendants("Users");
    while(nodes.Count > 0)
    {
        nodes[0].Remove();
    }
这应该很好:

XDocument document = XDocument.Load(xmlPath);
document.Descendants("Users").Elements().Remove();
正如@Cory所建议的,替代和更快的方法是:

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

就烤一个新鲜的<代码>新XDocument(新XElement(“用户”)在发布问题之前是否尝试过搜索?检查
Users
是XML中唯一的节点吗?如果是这样的话,为什么不使用一个新的XDocument和一个空的用户节点来重写文件呢?您希望调用
RemoveNodes()
将文件保存回磁盘吗?不清楚你所说的“似乎不起作用”是什么意思。@JonSkeet好的,说得好。这通过调用save方法修复了它。Thankscaling.Save()解决了我的问题,谢谢。
document.Root.Elements().Remove()
会更快,不会扫描整个树<代码>子体()很少是您想要使用的方法。同意!根据您的建议更新了答案。
    string xmlPath = Path.Combine(Environment.CurrentDirectory, @"Data\Credential.xml");
    XDocument document = XDocument.Load(xmlPath);

    var nodes = document.Descendants("Users");
    while(nodes.Count > 0)
    {
        nodes[0].Remove();
    }
XDocument document = XDocument.Load(xmlPath);
document.Descendants("Users").Elements().Remove();
document.Root.Elements().Remove();