You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让XmlDocument生成的XML字符串包含换行符而非单行输出?

解决XmlDocument生成XML无换行的问题

嘿,我之前也碰到过这个麻烦!你现在用OuterXml直接获取的XML字符串确实是压缩成单行的——毕竟OuterXml本身就是为了生成紧凑、适合网络传输的XML设计的。要让输出带换行和缩进,得借助XmlWriter系列的类来处理,给你两种实用的方案:

方案1:使用XmlTextWriter(兼容旧版.NET)

这种方式比较经典,适合维护.NET Framework早期版本的项目:

XmlDocument xml = new XmlDocument();
XmlElement root = xml.CreateElement("customers");
xml.AppendChild(root);

foreach (var cust in customerlist)
{
    XmlElement child = xml.CreateElement("customer");
    child.SetAttribute("CustomerId", cust.CustomerId.ToString());
    child.SetAttribute("CustomerName", cust.CustomerName);
    child.SetAttribute("PhoneNumber", cust.PhoneNumber);
    child.SetAttribute("Email", cust.Email);
    root.AppendChild(child);
}

// 替换原来的OuterXml获取逻辑
using (StringWriter sw = new StringWriter())
using (XmlTextWriter writer = new XmlTextWriter(sw))
{
    writer.Formatting = Formatting.Indented; // 开启缩进换行
    writer.Indentation = 2; // 设置缩进为2个空格,可按需调整
    xml.WriteTo(writer);
    string formattedXml = sw.ToString(); // 这就是带格式的XML字符串了
}

方案2:使用XmlWriterSettings(推荐,适配现代.NET)

如果你的项目是.NET Framework 2.0+或者.NET Core/.NET 5+,更推荐这种方式,配置更灵活:

XmlDocument xml = new XmlDocument();
XmlElement root = xml.CreateElement("customers");
xml.AppendChild(root);

foreach (var cust in customerlist)
{
    XmlElement child = xml.CreateElement("customer");
    child.SetAttribute("CustomerId", cust.CustomerId.ToString());
    child.SetAttribute("CustomerName", cust.CustomerName);
    child.SetAttribute("PhoneNumber", cust.PhoneNumber);
    child.SetAttribute("Email", cust.Email);
    root.AppendChild(child);
}

// 配置格式化参数
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = "  "; // 用两个空格缩进,换成"\t"就是制表符缩进
settings.NewLineChars = Environment.NewLine; // 自动适配系统换行符

using (StringWriter sw = new StringWriter())
using (XmlWriter writer = XmlWriter.Create(sw, settings))
{
    xml.WriteTo(writer);
    string formattedXml = sw.ToString();
}

小提示

两种方案的核心都是通过专门的XML写入器生成格式化输出,而非直接调用OuterXml。生成后的XML会自动给每个节点添加换行和缩进,结构一目了然,非常方便调试和查看。

内容的提问来源于stack exchange,提问作者Breathing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:13:29