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

Windows下PowerShell的xml.save为何在多行注释中生成LF而非CRLF?

在Windows下PowerShell的Xml.Save()保存多行注释时换行符变为LF而非CRLF的原因及解决方案

问题原因

.NET Framework中XmlDocument.Save()方法的默认行为遵循XML规范:XML标准统一使用LF(\n)作为换行符,与操作系统原生换行符无关。即使你在输入的XML字符串中使用了Windows的CRLF(\r\n),XmlDocument在解析并保存时会自动将所有换行符标准化为LF,以此保证XML文件的跨平台兼容性。

测试代码

[xml]$myXml= @"
<myTag>
        <!-- multi line comment
        each line ends with CR LF
        in my code, but with LF
        after .save gets called
        end of my multi line comment -->
</myTag>
"@

$myXml.save("C:\temp\my.xml")

解决方案评估

你提到的使用XmlWriterSettings和XmlWriter的方案是有效且符合规范的,同时可以通过using语句简化代码,自动管理资源:

$settings = New-Object System.Xml.XmlWriterSettings
$settings.NewLineChars = "`r`n"
$settings.Indent = $true

using ($writer = [System.Xml.XmlWriter]::Create("C:\temp\my.xml", $settings)) {
    $myXml.Save($writer)
}

这已经是最简单的解决方案了——因为XmlDocument.Save(string path)的无参数重载内部使用默认配置的XmlWriter,没有直接的参数可以修改换行符行为,必须通过自定义XmlWriterSettings来指定换行符类型。using语句替代手动Close(),既简化了代码又能确保资源被正确释放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:18:31