Есть ли способ заставить XmlTextWriter не записывать избыточные пространства имен

Я выписываю все свои узлы и получаю следующий XML:

<?xml version="1.0" encoding="utf-8"?>
<root attribute="xyz">
  <h:table xmlns:h="http://www.windward.net" attribute="xyz">
    <h:tr xmlns:h="http://www.windward.net">
      <h:name xmlns:h="http://www.windward.net">windward</h:name>
      <h:width xmlns:h="http://www.windward.net">42</h:width>
    </h:tr>
  </h:table>
  <f:table xmlns:f="http://www.windward2.net" attribute="xyz">
    <f:name xmlns:f="http://www.windward2.net">windward2</f:name>
    <f:width xmlns:f="http://www.windward2.net">42</f:width>
    <f:length xmlns:f="http://www.windward2.net">120</f:length>
  </f:table>
  <test>42</test>
</root>

Есть ли способ заставить XmlTextWriter не повторять xmlns:h и xmlns:f во внутренних узлах?

Это для некоторого кода, где при добавлении узлов (приведенный выше простой пример) я точно не знаю, какие пространства имен были добавлены выше в DOM.


person David Thielen    schedule 13.12.2020    source источник
comment
Это делает то, что вы хотите? stackoverflow.com/a/24705961/2193968   -  person Jerry Jeremiah    schedule 13.12.2020
comment
Также есть это: stackoverflow. ком/вопросы/26743/   -  person Jerry Jeremiah    schedule 13.12.2020
comment
@JerryJeremiah Он показывает способ сделать это с помощью XmlWriter (не XmlTextWriter). Есть ли недостаток в переходе на XmlWriter с XmlTextWriter?   -  person David Thielen    schedule 13.12.2020


Ответы (1)


Вы можете использовать XmlWriter с XmlWriterSettings, где NamespaceHandling опускает дубликаты:

 using (XmlWriter xw = XmlWriter.Create(Console.Out, new XmlWriterSettings() { Indent = true, NamespaceHandling = NamespaceHandling.OmitDuplicates }))
        {
            doc.Save(xw);
        }

XmlTextWriter — это просто устаревшая (.NET 1.0) реализация XmlWriter, с точки зрения соответствия стандартам XmlWriter.Create не должна причинять вам никаких неудобств, если только вы не используете некоторые функции XmlTextWriter, которые больше специфичны для Microsoft, чем для стандарта XML.

person Martin Honnen    schedule 15.12.2020