我需要使用XmWriter在元素中使用多个xmlns元素

时间:2010-03-23 16:33:21

标签: c# xml xsd xml-namespaces xmlwriter

我正在尝试将xml文档从一种格式转换为另一种格式,而在执行此操作时,我发现需要将多个xmlns声明插入根元素。

示例:

<?xml version =“1.0”encoding =“utf-8”?>
< Template xmlns =“http://tempuri.org/TemplateBase.xsd”     的xmlns:类型= “http://tempuri.org/TemplateTypes.xsd” >
一些内容
<模板>

所有这一切的原因是我将XSD架构划分为多个XSD,以便在这种情况下重用一般类型。

好吧,我现在要做的是用XmlTextWriter编写这个xml,但我不能为TYPES编写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使用..

有没有人治愈我目前的头痛?

2 个答案:

答案 0 :(得分:9)

使用

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

而不是

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

这应该可以提供所需的输出。

答案 1 :(得分:0)

这很简单。不要写xmlns属性。

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