我正在尝试将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使用..
有没有人治愈我目前的头痛?
答案 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属性)。