7

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

例子:

<?xml version="1.0" encoding="utf-8" ?>
<Template xmlns="http://tempuri.org/TemplateBase.xsd" xmlns:TYPES="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: Prefix "xmlns" is reserved for use by XML..

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

4

2 回答 2

10

采用

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

代替

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

这应该会给你想要的输出。

于 2010-03-23T17:03:06.267 回答
0

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

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

于 2010-03-23T16:37:16.207 回答