PowerShell用SetAttribute修改XML属性时意外带入回车换行字符问题
问题产生的原因
脚本里$foldername = Out-String -InputObject $buildrev这行代码是异常转义内容的来源。Out-String将输入对象转为字符串时,默认会在结果末尾自动追加匹配当前操作系统的行终止符(Windows环境下就是回车+换行两个控制字符)。这类控制字符不允许直接出现在XML属性值内,当XML对象执行Save操作序列化文件时,会把这些控制字符自动转义为
的实体编码,最终就生成了你看到的带多余转义序列的属性值。
修正方案
原有XML操作的核心逻辑是正确的,只需要去掉引入冗余字符的转换步骤,同时增加对输入值的冗余字符清理即可:
- 移除不必要的
Out-String调用,避免主动引入末尾换行 - 对传入的版本参数调用
.Trim()方法,剔除首尾所有空白、控制字符,确保写入的是纯目标文本 - 保持原有XML加载、属性设置、文件保存的流程不变
修正后的完整脚本:
param($configfilepath, $buildrev) # 直接取参数值,裁剪首尾多余的空白、换行控制字符 [string]$foldername = $buildrev.Trim() $error.Clear() $xml = New-Object xml $xml.Load($configfilepath) $xml.configuration.appSettings.add.SetAttribute('value', $foldername) $xml.Save($configfilepath)
实际效果
执行修正后的脚本,生成的XML配置文件中,appSettings节点下add元素的value属性会直接写入你传入的纯文本内容(例如示例中的025),不会附带任何
格式的回车换行转义内容。
内容的提问来源于stack exchange,提问作者The King
相关产品推荐
相关产品推荐

