在C#中删除特定的XML元素及其子元素

本文关键字:元素 XML 删除 | 更新日期: 2023-09-27 17:58:39

假设我有这个XML文件:

<Stops>
    <Stop>
        <ID>1022</ID>
        <UserDescription>Test</UserDescription>
    </Stop>
    <Stop>
        <ID>1053</ID>
        <UserDescription>Test1045</UserDescription>
    </Stop>
</Stops>

我想删除ID等于一个值的整个节点。

因此,例如删除带有1022的节点应该给出:

<Stops>
    <Stop>
        <ID>1053</ID>
        <UserDescription>Test1045</UserDescription>
    </Stop>
</Stops>

到目前为止我一直在尝试的代码(Windows Phone中的C#)。它似乎出现了故障,使XML无法读取。我不知道哪里出了问题。。。

        using (isoStore)
        {
            XDocument doc;
            using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(StopFileName, FileMode.Open, isoStore))
            {
                doc = XDocument.Load(isoStream, LoadOptions.None);
                doc.Descendants("Stop")
                      .Where(x => (string)x.Element("ID") == "1022").Remove();
                doc.Save(isoStream);
            }
        }

在C#中删除特定的XML元素及其子元素

我认为您的错误是使用相同的流读取和保存。

如果您查看自己的代码,则可以从文件中加载xml:

doc = XDocument.Load(isoStream, LoadOptions.None);

然后保存到同一个流:

doc.Save(isoStream);

所以您最终得到的XML文件看起来像这个

<Stops>
    <Stop>
        <ID>1022</ID>
        <UserDescription>Test</UserDescription>
    </Stop>
    <Stop>
        <ID>1053</ID>
        <UserDescription>Test1045</UserDescription>
    </Stop>
</Stops>
<Stops>
    <Stop>
        <ID>1053</ID>
        <UserDescription>Test1045</UserDescription>
    </Stop>
</Stops>

有两个根元素确实会导致"意外的XML声明"

我会更改您的代码,以便首先读取文件,然后创建一个新文件/覆盖现有文件。

        using (isoStore)
        {
            XDocument doc;
            using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(StopFileName, FileMode.Open, isoStore))
            {
                doc = XDocument.Load(isoStream, LoadOptions.None);
            }
            doc.Descendants("Stop")
                      .Where(x => (string)x.Element("ID") == "1022").Remove();
            using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(StopFileName, FileMode.Create, isoStore))
            {
                doc.Save(isoStream);
            }
        }
相关文章: