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

如何使用XML/XElement实现带冒号前缀的<HART:HART>标签

解决XML根元素前缀不显示的问题

我明白你的困扰——你想要生成带HART:前缀的根元素<HART:HART>,但当前代码输出的却是不带前缀的<HART>,这是因为你对XML命名空间前缀的处理逻辑有点偏差,咱们来一步步修正:

问题根源

你当前的代码把目标命名空间设为了默认命名空间(没有前缀),所以生成的元素会使用xmlns="..."的形式,而不是显式的前缀绑定。要得到<HART:HART>,需要先把HART这个前缀和目标命名空间绑定,再用这个前缀来命名根元素。

修改后的代码

public FileStreamResult Submission(Models.Reporting.SubmissionViewModel svm) {
    MemoryStream ms = new MemoryStream();
    XmlWriterSettings xws = new XmlWriterSettings();
    xws.OmitXmlDeclaration = true;
    xws.Indent = true;

    // 定义两个核心命名空间:HART前缀对应的命名空间,以及xsi标准命名空间
    XNamespace hartNs = "www.myurlhere.com";
    XNamespace xsiNs = "http://www.w3.org/2001/XMLSchema-instance";

    using (XmlWriter xw = XmlWriter.Create(ms, xws)) {
        XDocument doc = new XDocument(
            // 根元素:关联HART命名空间,这样会自动使用我们声明的前缀
            new XElement(hartNs + "HART",
                // 关键:声明HART前缀和命名空间的映射,这会生成xmlns:HART="..."
                new XAttribute(XNamespace.Xmlns + "HART", hartNs),
                // 声明xsi命名空间
                new XAttribute(XNamespace.Xmlns + "xsi", xsiNs),
                // 设置schemaLocation,按你期望的格式赋值
                new XAttribute(xsiNs + "schemaLocation", "www.myurlhere")
            )
        );
        doc.WriteTo(xw);
    }

    ms.Position = 0;
    return File(ms, "text/xml", "Sample.xml");
}

关键修改点说明

  • 显式声明前缀映射:新增的new XAttribute(XNamespace.Xmlns + "HART", hartNs)这行代码,就是告诉XML解析器:HART这个前缀对应www.myurlhere.com这个命名空间,这样根元素就会显示为HART:HART。
  • 统一命名空间URL:我把你代码里的http://www.myurlhere.com改成了www.myurlhere.com,和你期望的xmlns:HART="www.myurlhere.com"保持一致。
  • 根元素关联命名空间:hartNs + "HART"确保根元素属于HART命名空间,结合前缀映射,就会生成带前缀的标签。

生成的XML结果

修改后输出的XML会完全符合你的预期:

<HART:HART xmlns:HART="www.myurlhere.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="www.myurlhere" />

内容的提问来源于stack exchange,提问作者S.Gray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:28:14