Как вывести XmlDocument, чтобы атрибуты элемента также имели отступ?

Я хочу вывести 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);
}

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

Спасибо.

ИЗМЕНИТЬ1

Например, рассмотрим этот фрагмент 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>

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


person mark    schedule 16.12.2010    source источник
comment
Вы должны указать язык программирования в теге. Я бы хотел, но я этого не знаю...   -  person musiKk    schedule 16.12.2010
comment
Можете ли вы привести пример того, как выглядит XML в настоящее время, по сравнению с тем, как вы хотите, чтобы он выглядел?   -  person pmartin    schedule 16.12.2010


Ответы (1)


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

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

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

}
person John Saunders    schedule 16.12.2010
comment
Помечен как ответ, хотя результат далеко не красив. Но это проблема вопроса, а не ответа. - person mark; 18.12.2010