【问题标题】:How do i delete a certain element from XmlDocument?如何从 XmlDocument 中删除某个元素?
【发布时间】:2021-02-15 09:20:13
【问题描述】:

我似乎无法弄清楚这一点。我想用代码从这个 XML 中删除第 nr 3 行。

1 <Storage>
2  <ID1 Name="123" Producer="123" EANnr="123" />
3  <ID2 Name="xxx" Producer="xxx" EANnr="xxx" />
4 </Storage>

这就是我将行添加到 XML 的方式:

public string DBAddToXML()
        {
            XmlNode Storage = storageData.CreateElement("Storage");
            storageData.AppendChild(Storage);

            XmlElement iDAttribute = storageData.CreateElement("ID" + scannedItemId.ToString());         
            iDAttribute.SetAttribute("Name", scannedItemName.ToString());
            iDAttribute.SetAttribute("Producer", scannedItemProducer.ToString());
            iDAttribute.SetAttribute("EANnr", scannedItemEANnr.ToString());
            Storage.AppendChild(iDAttribute);
            
            storageData.Save(STORAGE_DATA_FILE_NAME);
            
            return storageData.InnerXml;
        }

我使用它是因为它是我发现的唯一可以添加行而不覆盖任何内容的东西。如果我尝试添加一个节点,它只是没有添加任何内容,或者它替换了所有内容。但是这个解决方案对我有用。除了我不知道如何搜索特定行并将其删除。计划是搜索 ID 号,即元素的名称。

这个函数只运行一次。它是创建文件,这就是为什么没有 FIle.Load,我有另一个功能,但它是相同的减去 XmlNode 存储部分。

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    首先你必须加载你的文档

    var doc = new XmlDocument();
    doc.LoadXml(storageXmlData);
    

    然后选择你要删除的元素

    var node = doc.SelectSingleNode("/Storage/ID2");
    

    我建议您阅读“xpath”文档以了解要使用的选择器。我还建议您使用元素上的名称之类的属性来标识元素并使用通用类型的元素。

    最后,你可以从父元素中删除你的元素

    if(node != null)
    {
        node.ParentNode.RemoveChild(node);
    }
    

    【讨论】:

    • 我已经尝试了很多次这个解决方案,但都没有成功。我想我的 SelectSingleNode 参数错误或其他什么。现在可以了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多