Как вывести XmlDocument, чтобы атрибуты элементов также были с отступом? - PullRequest
2 голосов
/ 16 декабря 2010

Я хочу вывести XmlDocument, чтобы атрибуты также имели отступ. Я попробовал два подхода:

var cfgXmlDoc = new XmlDocument();
cfgXmlDoc.PreserveWhitespace = true;
cfgXmlDoc.Load(cfgFilePath);
...
File.WriteAllText(cfgFilePath, cfgXmlDoc.OuterXml);

И

var cfgXmlDoc = new XmlDocument();
cfgXmlDoc.Load(cfgFilePath);
...
using (var xmlWriter = new XmlTextWriter(cfgFilePath, Encoding.UTF8))
{
  xmlWriter.Formatting = Formatting.Indented;
  cfgXmlDoc.WriteTo(xmlWriter);
}

Как и следовало ожидать, никто не отступает от атрибутов. Кто-нибудь знает, как это сделать?

Спасибо.

EDIT1

Например, рассмотрим этот фрагмент XML:

  <dataPortalProxies thisEndpointKind="Agent">
    <dataPortalProxy isEnabled="true" name="NC Server" endpointKind="Server"
                     implementation="Shunra.Common.Csla.WcfOneWayProxy, Shunra.Common">
      <add key="AddressTemplate" value="net.msmq://{0}/private/nc_queue"/>
    </dataPortalProxy>
    <dataPortalProxy isEnabled="true" name="Peer Agent" endpointKind="Agent"
                     implementation="Shunra.Common.Csla.WcfDynamicProxy, Shunra.Common">
      <add key="AddressTemplate" value="https://{0}:7000/NCAgent/WcfPortal.svc"/>
    </dataPortalProxy>
  </dataPortalProxies>

Пропуск через XmlDocument дает следующий результат:

  <dataPortalProxies thisEndpointKind="Agent">
    <dataPortalProxy isEnabled="true" name="NC Server" endpointKind="Server" implementation="Shunra.Common.Csla.WcfOneWayProxy, Shunra.Common">
      <add key="AddressTemplate" value="net.msmq://{0}/private/nc_queue" />
    </dataPortalProxy>
    <dataPortalProxy isEnabled="true" name="Peer Agent" endpointKind="Agent" implementation="Shunra.Common.Csla.WcfDynamicProxy, Shunra.Common">
      <add key="AddressTemplate" value="https://{0}:7000/NCAgent/WcfPortal.svc" />
    </dataPortalProxy>
  </dataPortalProxies>

То, что я хочу, это какой-то вид переноса длинных строк для атрибутов, чтобы любые атрибуты, превышающие определенную ширину строки, имели отступ на следующей строке. Короче симпатичная печать.

1 Ответ

2 голосов
/ 16 декабря 2010

Никогда не следует использовать new XmlTextWriter(), поскольку устарела с версии .NET 2.0.

Вместо * используйте XmlWriter.Create():

XmlWriterSettings settings = 
    new XmlWriterSettings {Indent = true, NewLineOnAttributes = true};
using (var writer = XmlWriter.Create("path", settings))
{

}
...