Мне нужно несколько элементов xmlns в элементе с XmWriter - PullRequest
6 голосов
/ 23 марта 2010

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

Пример:

<? Xml version = "1.0" encoding = "utf-8"?>

некоторый контент

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

Хорошо, теперь я хочу написать этот xml с XmlTextWriter, но я не могу написать атрибут 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 ]

9 голосов
/ 23 марта 2010

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

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

вместо

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

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

0 голосов
/ 23 марта 2010

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

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

...