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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:54:23