PowerShell生成XML文件插入大量空行导致体积异常增大问题
问题原因
- 生成文件体积暴涨的核心原因是错误使用了PowerShell的
Format-Table、Format-Wide命令:这类命令是专门为控制台展示内容设计的格式化工具,输出的不是原始XML文本,会自动插入大量用于排版对齐的空行、填充空白,直接把原始2.4MB的内容撑到120MB。 - 原脚本两次调用
Out-File未加-Append参数,第二次写入会直接覆盖之前写入的XML头,同时两次写入默认编码不统一,还可能出现乱码问题。 - 原脚本里的SQL查询字符串存在语法缺失,开头少了左括号,执行时会直接报SQL语法错误。
修正后可直接使用的脚本
function ProcToXmlFile { param ( [string]$outputType, [string]$filename ) $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=localhost;Database=customerdatabase;Integrated Security=True" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand # 补全原SQL查询缺失的左括号,修复语法错误 $Query = @" ( select * from table where condition=1 FOR XML PATH('root'), TYPE ) FOR XML PATH(''), ROOT('root') "@ $SqlCmd.CommandText = $Query $SqlCmd.Connection = $SqlConnection $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $DataSet = New-Object System.Data.DataSet $SqlAdapter.Fill($DataSet) $SqlConnection.Close() # 直接读取DataSet中存储的原始XML字符串,禁用所有Format-*格式化操作 $rawXmlContent = $DataSet.Tables[0].Rows[0][0].ToString() $xmlHeader = '<?xml version="1.0" encoding="UTF-8"?>' if ($outputType -eq "Text") { # 拼接头和内容后一次性写入,统一UTF8编码,避免多余空行、内容覆盖、乱码问题 $finalOutput = $xmlHeader + "`r`n" + $rawXmlContent $finalOutput | Out-File $filename -Encoding utf8 } }
注意事项
- 所有需要导出原始文本、结构化数据的场景,都不要用
Format-Wide、Format-Table、Format-List这类控制台格式化命令,这类命令的输出结果仅适合人在控制台看,不适合系统间集成的文件生成场景。 - 如果需要分多次往同一个文件写内容,必须给
Out-File加上-Append参数,否则每次调用都会覆盖文件里之前的内容。 - XML声明里的编码属性要和文件实际写入的编码保持一致,避免对接的客户系统解析文件时出现乱码。
内容的提问来源于stack exchange,提问作者Magskull
相关产品推荐
相关产品推荐

