You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#的XDocument为现有XML命名空间添加别名前缀

给默认命名空间添加别名前缀并更新元素(C# XDocument实现)

我来帮你搞定这个需求——用C#的XDocument给默认命名空间添加指定别名,同时给所有未带前缀的元素补上这个前缀。其实核心思路就是重新映射默认命名空间到新前缀,然后批量更新元素名称,具体实现如下:

完整代码示例

using System;
using System.Xml.Linq;

class XmlNamespacePrefixer
{
    static void Main()
    {
        // 原XML(注意修正了xyz:id的闭合标签错误,确保能正常解析)
        string originalXml = @"<root xmlns:xyz=""do/not/change"" xmlns=""add/alias""> <name>Test</name> <xyz:id>100</xyz:id> </root>";
        XDocument doc = XDocument.Parse(originalXml);

        // 1. 获取原默认命名空间(即xmlns="add/alias"对应的URI)
        XNamespace originalDefaultNs = doc.Root.GetDefaultNamespace();
        // 2. 定义新前缀对应的命名空间(和原默认命名空间URI完全一致)
        XNamespace targetNs = originalDefaultNs;
        const string prefix = "abc";

        // 3. 给根元素添加新的命名空间别名声明
        doc.Root.Add(new XAttribute(XNamespace.Xmlns + prefix, targetNs.NamespaceName));

        // 4. 遍历所有元素,将属于原默认命名空间的元素替换为带新前缀的名称
        foreach (XElement element in doc.Descendants())
        {
            if (element.Name.Namespace == originalDefaultNs)
            {
                element.Name = targetNs + element.Name.LocalName;
            }
        }

        // 5. 移除原默认命名空间的声明(因为现在所有对应元素都用前缀标识了)
        doc.Root.Attribute("xmlns")?.Remove();

        // 输出转换后的XML
        Console.WriteLine(doc.ToString());
    }
}

代码解释

  1. 获取默认命名空间:通过Root.GetDefaultNamespace()拿到原XML中无前缀元素所属的命名空间add/alias。
  2. 添加前缀声明:用XNamespace.Xmlns + "abc"创建一个新的命名空间属性,添加到根元素,这样就生成了xmlns:abc="add/alias"的声明。
  3. 批量更新元素名称:遍历所有元素,检查元素是否属于原默认命名空间,如果是,就把元素名称替换为abc:前缀加上原元素的本地名称(比如root变成abc:root,name变成abc:name)。
  4. 清理原默认命名空间:移除根元素上的xmlns="add/alias"属性,因为现在所有对应元素都通过前缀明确指定了命名空间,不需要默认值了。

输出结果

运行代码后,你会得到完全符合需求的XML:

<abc:root xmlns:xyz="do/not/change" xmlns:abc="add/alias"> <abc:name>Test</abc:name> <xyz:id>100</xyz:id> </abc:root>

内容的提问来源于stack exchange,提问作者Jacob Regan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:26:05