gpt4 book ai didi

c# - 如何将 xmlns 属性添加到现有的 xml 文档

转载 作者:行者123 更新时间:2023-11-30 20:01:55 25 4
gpt4 key购买 nike

我有现有的 xml 文档。

例如

<Test>
<A />
</Test>

我将此 xml 加载到 XDocument 中。我需要将属性 xmlns 添加到此文档并使用此属性保存它。

var xml = new XDocument.Load("c:\\filePath.xml");

当我尝试这个时:

xml.Root.SetAttributeValue("xmlns", "http://namespaceuri");

我遇到异常:

System.Xml.XmlException: The prefix '' cannot be redefined from 'http://namespaceuri' to  within the same start element tag.

谢谢

最佳答案

您还需要将名称设置在命名空间中:

XNamespace ns = "http://namespaceuri";
foreach (var element in xml.Descendants().ToList())
{
element.Name = ns + element.Name.LocalName;
}
xml.Root.SetAttributeValue("xmlns", ns.ToString());

基本上,您正在尝试将所有元素移动到该命名空间使其成为向下根元素的默认命名空间。您无法更改默认命名空间,同时将元素本身保留在不同但未限定的命名空间中。

将上面的代码与您的示例 XML(固定为关闭 A)一起使用会得到:

<Test xmlns="http://namespaceuri">
<A />
</Test>

请注意,此代码将更改所有 元素的 namespace 。如果你想更有选择性,你应该在 xml.Descendants() 调用之后添加一个 Where 调用,例如

foreach (var element in xml.Descendants()
.Where(x => x.Name.Namespace == XNamespace.None)
.ToList())

关于c# - 如何将 xmlns 属性添加到现有的 xml 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730777/

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