首页 > 解决方案 > Xml中的无效操作?

问题描述

我正在尝试从其xml值包含特定字符串的属性中删除属性。

这是我写的代码

XmlDocument doc = new XmlDocument();                                                          
doc.LoadXml("<book genre='#novel' ISBN='1-861001-57-5'>" +                                            
                "<title id ='#x'>Pride And Prejudice</title>" +
                "</book>");

   //Get the root element of the element
    XmlElement el = doc.DocumentElement;

    foreach (XmlElement a in doc.ChildNodes)
    {
        XmlAttributeCollection atributos = a.Attributes;

        foreach (XmlAttribute att in atributos)
        {
            if (att.Value.StartsWith("#"))
            {
                a.RemoveAttribute(att.Name); //Gives invalid operation exception
            }
        }
    }

在第二次迭代中,它给了我无效的操作错误。

我环顾四周,发现了一些可能是因为我正在尝试修改 foreach 循环中的集合。

如果是这样,最好的解决方案是什么?

我生成一个新的xml?

标签: c#xmlxml-attribute

解决方案


您可以通过索引以相反的顺序遍历属性,如下面的代码,它不会抛出异常。

foreach (XmlElement a in doc.ChildNodes)
{
    XmlAttributeCollection atributos = a.Attributes;

    for (var i = atributos.Count - 1; i >= 0; i--)
    {
        var att = a.Attributes[i];
        if (att.Value.StartsWith("#"))
        {
            a.RemoveAttribute(att.Name);
        }
    }
}

推荐阅读