Я пытаюсь преобразовать xml документ от одного формата до другого, и при выполнении этого я нашел, что должен вставить несколько xmlns объявлений в корневой элемент.
Пример:
<? версия xml = "1.0" кодирование = "utf-8"?>
<Обрабатывают xmlns по шаблону = "http://tempuri.org/TemplateBase.xsd" xmlns:TYPES = "http://tempuri.org/TemplateTypes.xsd">
некоторое содержание
<Шаблон>
Причина всего этого состоит в том, что я разделил схему 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);
Когда я выполняю этот код, я получаю следующее исключение:
Система. ArgumentException: Префикс "xmlns" резервируется для использования XML..
У кого-либо есть какое-либо средство исправления к моей текущей головной боли?
Используйте
xmlWriter.WriteAttributeString("xmlns", "TYPES",
null, "http://tempuri.org/TemplateTypes.xsd");
вместо
xmlWriter.WriteAttributeString("xmlns", "TYPES",
"http://tempuri.org/TemplateTypes.xsd", XmlSchema.InstanceNamespace);
. Это должно дать вам желаемый результат.
Это очень просто. Не записывайте атрибуты xmlns
.
Вместо этого вы должны записывать свои атрибуты и элементы в пространстве имен, которому они принадлежат. XmlWriter
самостоятельно позаботится об объявлениях пространства имен (атрибутов xmlns).