PowerShell创建XML对象和文件应优先使用[xml]类型转换或XmlDocument类,避免字符串拼接;通过Save()方法保存,默认UTF-8编码,需用XmlWriterSettings控制缩进与BOM。

PowerShell 创建 XML 对象和文件非常直接,核心是用 [xml] 类型加速解析或构建,再用 Save() 方法写入磁盘。关键不是“硬拼字符串”,而是利用 .NET 的 XmlDocument 或更轻量的 XmlWriter 来保证格式合法、编码正确。
用 [xml] 类型快速创建简单 XML 对象
适合结构固定、内容不复杂的情况。PowerShell 会自动把符合 XML 格式的字符串转成 XmlDocument 对象:
- 先写一个合法的 XML 字符串(注意用双引号包裹,支持变量插值)
- 强制转换为
[xml]类型,就得到可操作的对象
例如:
```powershell$xmlStr = @"
@"
$doc = [xml]$xmlStr
```
之后就能用 $doc.root.person.name.InnerText 读取,或用 $doc.CreateElement("city") 动态添加节点。
用 XmlDocument 新建空 XML 并逐步构建
适合需要动态生成、逻辑判断或循环添加节点的场景。从空文档开始,用标准 DOM 方法逐层添加:
-
New-Object System.Xml.XmlDocument创建空对象 -
CreateElement()和CreateAttribute()创建元素与属性 -
AppendChild()或PrependChild()把节点挂到父节点下
示例(生成带属性的用户列表):
```powershell$doc = New-Object System.Xml.XmlDocument
$root = $doc.CreateElement("users")
$doc.AppendChild($root) | Out-Null
$user = $doc.CreateElement("user")
$idAttr = $doc.CreateAttribute("id")
$idAttr.Value = "101"
$user.SetAttributeNode($idAttr)
$name = $doc.CreateElement("name")
$name.InnerText = "李四"
$user.AppendChild($name) | Out-Null
$root.AppendChild($user) | Out-Null
```
保存 XML 到文件(注意编码和缩进)
直接调用 Save() 方法最稳妥,它默认用 UTF-8 编码并自动处理声明和换行:
-
$doc.Save("C:\data\output.xml")—— 最简写法 - 如需控制缩进(让文件可读),先配置
XmlWriterSettings
带缩进的保存方式:
```powershell$settings = New-Object System.Xml.XmlWriterSettings
$settings.Indent = $true
$settings.IndentChars = " "
$settings.Encoding = [System.Text.UTF8Encoding]::new($false)
$writer = [System.Xml.XmlWriter]::Create("C:\data\pretty.xml", $settings)
$doc.WriteTo($writer)
$writer.Close()
```
避免常见坑
实际用时容易踩几个点:
- 别用字符串拼接 +
Out-File写 XML —— 容易缺闭合标签、编码错乱、特殊字符(如&)没转义 -
[xml]"&"会失败,必须写成"&"或改用CreateTextNode() - 保存路径不存在时
Save()会报错,建议提前用Test-Path -Path $dir -PathType Container检查目录 - 如果 XML 中含中文,确保
XmlWriterSettings.Encoding明确设为 UTF-8(且$false参数禁用 BOM,避免某些程序读取异常)
基本上就这些。用好 [xml] 类型和 XmlDocument,既能快速原型,也能写出健壮、可维护的 XML 生成脚本。










