PowerShell通过[xml]类型转换读取XML并用XmlDocument操作,需注意UTF8编码、命名空间处理及XPath定位,修改后调用.Save()保存。

PowerShell 读取和修改 XML 文件非常方便,核心是用 [xml] 类型加速解析,再通过 .NET 的 XmlDocument 对象操作节点。关键不是“怎么加载”,而是“怎么准确定位并安全修改”——尤其要注意命名空间、属性写法、保存编码等易错点。
直接用 [xml] 强制类型转换是最常用方式,PowerShell 会自动加载为 XmlDocument 对象:
$xml = [xml](Get-Content "config.xml" -Encoding UTF8)
⚠️ 注意:
– 必须指定 -Encoding UTF8(或对应编码),否则含中文时可能乱码;
– 文件路径要存在,否则报错;
– 如果 XML 格式不合法(如标签未闭合),转换会失败,建议加 try/catch。
推荐用 SelectSingleNode() 或 SelectNodes() 配 XPath,比遍历更精准:
$xml.SelectSingleNode("//server[@id='prod']/ip").InnerText → 获取 id="prod" 的 server 下 ip 节点的文本$xml.SelectNodes("//user").Count → 统计所有 user 节点个数xmlns="http://example.com/ns"),需先创建 XmlNamespaceManager 并注册前缀,否则 XPath 查不到改内容用 .InnerText,改属性用 .SetAttribute(),新增节点用 .CreateElement() + .AppendChild():
$xml.SelectSingleNode("//database/name").InnerText = "NewDB"
$xml.SelectSingleNode("//connection").SetAttribute("timeout", "30")
$newNode = $xml.CreateElement("backup"); $newNode.InnerText = "true"; $xml.root.AppendChild($newNode) | Out-Null
$nodeToRemove = $xml.SelectSingleNode("//temp"); $nodeToRemove.ParentNode.RemoveChild($nodeToRemove) | Out-Null
直接用 .Save() 方法,它默认按原始编码保存,但不会自动美化缩进:
$xml.Save("config.xml")
如果希望输出带缩进的可读格式,可手动设置:$xml.PreserveWhitespace = $false$xml.Save("config.xml")
不过 PowerShell 原生不支持自动缩进输出(不像 .NET 的 XmlWriter),如需格式化,得额外用 System.Xml.XmlWriter 构造器配置,日常简单修改通常够用。
基本上就这些。不复杂但容易忽略编码和命名空间——先确认 XML 结构,再选对 XPath,改完记得 .Save(),别只改内存对象。
以上就是PowerShell怎么读取和修改XML文件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号