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

时间:2017-07-05 15:46:01

标签: c# xml visual-studio

我有以下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, @"Data\Credential.xml");
    XDocument document = XDocument.Load(xmlPath);
    document.RemoveNodes();
}

这似乎不起作用。我也完成了以下工作:

尝试#2

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

        foreach (var node in document.Descendants("Users"))
        {
            node.Remove();
        }

但这会产生异常错误。

在一天结束时,我只想回到以下文件数据的第一个方面:

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

2 个答案:

答案 0 :(得分:1)

这应该可以正常工作:

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

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

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

答案 1 :(得分:0)

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

    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();
    }