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