如何输出XmlDocument以便元素属性也缩进?

时间:2010-12-16 08:13:52

标签: c# xml pretty-print

我想输出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 个答案:

答案 0 :(得分:2)

你永远不应该使用new XmlTextWriter()自.NET 2.0以来已被弃用。

改为使用XmlWriter.Create()

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

}