我想输出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>
我想要的是属性的某种包装长行,以便超过特定行宽的任何属性都在下一行中缩进。简而言之就是漂亮的印刷。
答案 0 :(得分:2)
你永远不应该使用new XmlTextWriter()
自.NET 2.0以来已被弃用。
改为使用XmlWriter.Create()
:
XmlWriterSettings settings =
new XmlWriterSettings {Indent = true, NewLineOnAttributes = true};
using (var writer = XmlWriter.Create("path", settings))
{
}