我正在尝试从 xml 文档中删除一些属性。这是我尝试过的:
private void RemoveEmptyNamespace(XElement element) {
foreach (XElement el in element.Elements()) {
if (el.Attribute("xmlns") != null && el.Attribute("xmlns").Value == string.Empty)
el.Attribute("xmlns").Remove();
if (el.HasElements)
RemoveEmptyNamespace(el);
}
}
但这不起作用。当我在方法内部调试时,属性被删除,但是当方法完全执行时,没有保存任何更改。该文件是相同的。我想这是因为 foreach 循环,但我没有看到其他循环方式。
任何建议表示赞赏。
编辑:这是我正在使用的整个代码:
var file = new FileStream(destinationPath, FileMode.Open);
var doc = new XDocument();
doc = XDocument.Load(savedFile);
RemoveEmptyNamespace(doc.Root);//method above
file.SetLength(0);
doc.Save(file);
file.Close();
EDIT2:现在我尝试通过逐行替换字符串来实现相同的目标。并且什么也没有发生!!!文件还是一样的。如果有人有类似的问题,请帮助我。
我已经找到了真正的问题所在。每次我更改文档中的某些内容时,XDocument 类都会添加空白 xmlns!这就是为什么我无法删除它们。它的行为与此类似,因为它需要为您创建的每个 XElement 定义命名空间。所以我就这样解决了这个问题。唯一需要做的就是将命名空间添加到 XElement 名称。像这样的事情:
XNamespace nameSpace = "http://schemas.microsoft.com/developer/msbuild/2003";
var subType = new XElement(nameSpace + "SubType"); // strange but true
我希望这能帮助有同样问题的人。谢谢大家的回答。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)