PowerShell怎么创建XML对象和文件

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 = @"


张三
28


@"
$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 生成脚本。