在Xml中无效的操作?

时间:2018-11-29 01:50:22

标签: c# xml xml-attribute

我正在尝试从其值包含某些字符串的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吗?

1 个答案:

答案 0 :(得分:1)

您可以按照相反的顺序按索引遍历属性,就像下面的代码一样,它不会引发异常。

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