C# 我需要在XmWriter的一个元素中包含多个xmlns元素

C# 我需要在XmWriter的一个元素中包含多个xmlns元素,c#,xml,xsd,xml-namespaces,xmlwriter,C#,Xml,Xsd,Xml Namespaces,Xmlwriter,我正在尝试将xml文档从一种格式转换为另一种格式,同时我发现我需要向根元素插入多个xmlns声明 例如: 一些内容 这一切的原因是我将XSD模式划分为多个XSD,以便在本例中重用常规类型 我现在要做的是用XmlTextWriter编写xml,但是我不能为这些类型编写xmlns属性 到目前为止,我尝试的是: XmlWriter xmlWriter = XmlWriter.Create(filename, settings); xmlWriter.WriteStartElement("Te

我正在尝试将xml文档从一种格式转换为另一种格式,同时我发现我需要向根元素插入多个xmlns声明

例如:



一些内容

这一切的原因是我将XSD模式划分为多个XSD,以便在本例中重用常规类型

我现在要做的是用XmlTextWriter编写xml,但是我不能为这些类型编写xmlns属性

到目前为止,我尝试的是:

XmlWriter xmlWriter = XmlWriter.Create(filename, settings);  
xmlWriter.WriteStartElement("Template", "http://tempuri.org/TemplateBase.xsd");
xmlWriter.WriteAttributeString("xmlns", "TYPES", "http://tempuri.org/TemplateTypes.xsd", XmlSchema.InstanceNamespace);
当我执行此代码时,会出现以下异常:
System.ArgumentException:保留前缀“xmlns”供XML使用


有人能治好我现在的头痛吗?

很简单。不要编写
xmlns
属性

相反,您应该在属性和元素所属的名称空间中编写它们
XmlWriter
将自己处理名称空间声明(xmlns属性)。

使用

xmlWriter.WriteAttributeString("xmlns", "TYPES", 
    null, "http://tempuri.org/TemplateTypes.xsd");
而不是

 xmlWriter.WriteAttributeString("xmlns", "TYPES", 
    "http://tempuri.org/TemplateTypes.xsd", XmlSchema.InstanceNamespace);

这将为您提供所需的输出。

这将生成有效的XML,但我认为您在每个XML元素中都嵌入了完整的命名空间URI,因此这将导致非常大的输出文件。我希望声明中的XMLN便于最终用户在某一天手动编辑XML。