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

如何使用XDocument保留XML多行属性的格式?

解决LINQ to XML保存时丢失属性换行格式的问题

问题原因

你使用XDocument的LoadOptions.PreserveWhitespace和SaveOptions.DisableFormatting无效,是因为LINQ to XML解析XML时,属性之间的换行、缩进空白不会被识别为文档节点的一部分,加载后这些格式信息会丢失,自然无法通过保存选项恢复。

解决方案

方案1:用XmlDocument精准保留原始格式

如果需要完全还原XML原始的属性换行和缩进,推荐使用XmlDocument,它对空白的保留机制更适配这类需求:

XmlDocument xmlDoc = new XmlDocument();
// 开启空白保留
xmlDoc.PreserveWhitespace = true;
xmlDoc.Load(xmlCondigurationPath);

// 执行属性修改操作(示例)
XmlNode addNode = xmlDoc.SelectSingleNode("//add");
if (addNode != null)
{
    addNode.Attributes["attribute2"].Value = "updatedValue";
}

// 保存时自动保留原始格式
xmlDoc.Save(xmlCondigurationPath);

方案2:用XDocument配合XmlWriterSettings生成多行属性

如果坚持使用XDocument,可以通过自定义XmlWriterSettings强制让属性单独换行,虽无法100%还原原始空白细节,但能实现类似的多行展示效果:

XDocument xmlFile = XDocument.Load(xmlCondigurationPath);

// 执行属性修改操作(示例)
xmlFile.Root.Element("add")?.Attribute("attribute2")?.SetValue("updatedValue");

// 配置输出格式
XmlWriterSettings settings = new XmlWriterSettings
{
    Indent = true,
    NewLineOnAttributes = true, // 关键设置:每个属性单独一行
    IndentChars = "   ", // 匹配原始缩进的空格数
    OmitXmlDeclaration = false // 根据你的XML是否需要声明调整
};

// 用自定义设置保存
using (XmlWriter writer = XmlWriter.Create(xmlCondigurationPath, settings))
{
    xmlFile.Save(writer);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 20:15:00