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

使用XmlWriter生成XML时如何添加无前缀的默认命名空间

C# XmlWriter生成带默认命名空间的XML文档解决方案

错误原因

xmlns是XML预留的命名空间声明关键字,.NET的XmlWriter内置了命名空间声明的自动处理逻辑,不允许开发者手动写入xmlns开头的属性,你之前的两种写法都违背了XmlWriter的设计逻辑,因此会抛出异常。

正确解决方案

直接在调用WriteStartElement创建根元素时,通过重载方法传入默认命名空间参数即可,XmlWriter会自动生成符合要求的xmlns属性:

// 命名空间变量,和你之前的取值完全一致
string ns = "http://www.organdonation.nhs.uk/XMLschema/DCERT/ns";

using (var writer = XmlWriter.Create(fileName, settings))
{
    writer.WriteStartDocument();
    // 关键修改:调用双参数的WriteStartElement重载,第二个参数传入命名空间
    writer.WriteStartElement("GeneticsTestReport", ns);
    writer.WriteAttributeString("SchemaVersion", SchemaVersion);
    
    // 后续原有代码无需大范围修改,仅注意:如果子元素也属于该命名空间,写子元素时也要传入ns参数
    // 示例子元素写法:writer.WriteStartElement("子节点名", ns);
    
    // 其余原有逻辑保持不变
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

上述代码生成的XML开头完全匹配要求的格式:

<?xml version="1.0" encoding="UTF-8"?>
<GeneticsTestReport SchemaVersion="1-4" xmlns="http://www.organdonation.nhs.uk/XMLschema/DCERT/ns">

注意事项

如果文档内的子节点也属于这个默认命名空间,写子节点的WriteStartElement方法必须同样传入该命名空间参数,否则XmlWriter会自动给子节点添加xmlns=""的多余声明,破坏文档结构。

内容的提问来源于stack exchange,提问作者Neil J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:45:05