gpt4 book ai didi

c# - 从 XElement 中删除属性

转载 作者:行者123 更新时间:2023-11-30 13:20:32 26 4
gpt4 key购买 nike

我正在尝试从 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 定义 namespace 。所以我通过这样做解决了这个问题。唯一需要做的是将 namespace 添加到 XElement 名称。像这样:

XNamespace nameSpace = "http://schemas.microsoft.com/developer/msbuild/2003";
var subType = new XElement(nameSpace + "SubType"); // strange but true

希望对遇到同样问题的人有所帮助。感谢大家的回答。

关于c# - 从 XElement 中删除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6593243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com