2010-03-23 6 views
4

Я пытаюсь преобразовать XML-документ из одного формата в другой, и при этом я обнаружил, что мне нужно вставить несколько объявлений xmlns в корневой элемент.Мне нужно несколько элементов xmlns в элементе с XmWriter

Пример:

< версии XML = "1.0" кодирование = "UTF-8"? >
< Шаблон XMLNS = "http://tempuri.org/TemplateBase.xsd" Xmlns: ТИПЫ = "http://tempuri.org/TemplateTypes.xsd" >
некоторое содержание
< Шаблон >

Причина этого заключается в том, что я разделил схему XSD на несколько XSD, чтобы повторно использовать общие типы в этом случае.

Ну, что я хочу сделать сейчас, это написать этот xml с XmlTextWriter, но я не могу написать атрибут xmlns для TYPES.

То, что я пытался до сих пор:

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 ..

Есть ли у кого-нибудь лекарство от моей нынешней головной боли?

ответ

7

Использование

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

вместо

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

Это должно дать вам желаемый результат.

+0

Спасибо Doc, что сделал трюк! – 2010-03-24 09:59:19

0

Это очень просто. Не записывайте атрибуты xmlns.

Вместо этого вы должны писать свои атрибуты и элементы в пространстве имен, в котором они находятся. XmlWriter самостоятельно позаботится об объявлении пространства имен (атрибуты xmlns).

+0

Это приведет к действительному XML, но я думаю, что вы получите полный URI пространства имен, встроенный в каждый элемент XML, так что это приведет к * очень * большим выходным файлам. –

+0

Я хотел, чтобы xmlns в объявлении упростил для конечных пользователей, который однажды отредактирует xml вручную. – 2010-03-24 10:01:48