[xml]是PowerShell中System.Xml.XmlDocument的类型加速器,支持从字符串或文件(需-Raw参数)加载XML,提供XPath查询、节点修改及保存功能。
![PowerShell的[xml]类型加速器怎么用 PowerShell的[xml]类型加速器怎么用](https://seo.sqjnqi.com/wp-content/uploads/2025/12/20251215_69403ed91c19f.png)
[xml] 是 PowerShell 中最常用、最实用的类型加速器之一,它本质是 System.Xml.XmlDocument 类的快捷别名。你不需要写一长串 [System.Xml.XmlDocument],直接用 [xml] 就能快速把字符串或文件内容解析成可操作的 XML 对象。
用 [xml] 加载 XML 内容
只要数据格式合法,PowerShell 会自动解析为 XmlDocument 对象,支持 .Selectnodes()、.SelectSingleNode()、XPath 查询、属性访问等。
# 从字符串加载 $xml = [xml] @" <root> <person id="1"> <name>Alice</name> <age>30</age> </person> <person id="2"> <name>Bob</name> <age>25</age> </person> </root> "@ # 从文件加载(推荐用 Get-Content -Raw,避免换行截断) $xml = [xml](Get-Content -Raw "config.xml")
⚠️ 注意:
- 必须用
-Raw参数读取 XML 文件,否则Get-Content默认按行返回字符串数组,[xml]无法解析。 - 如果 XML 有 bom 或编码问题(如 UTF-8 with BOM),建议加
-Encoding UTF8。
用 [xml] 查询和修改节点
解析后就能像操作 dom 一样处理:
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
0 # 查找所有 person 节点 $persons = $xml.root.person # 用 XPath 查第一个 person 的 name $name = $xml.SelectSingleNode("//person[1]/name").InnerText # 查找 id=2 的 person 并改 age $target = $xml.SelectSingleNode("//person[@id='2']") $target.age = "26" # 新增一个节点 $newPerson = $xml.CreateElement("person") $newPerson.SetAttribute("id", "3") $newName = $xml.CreateElement("name") $newName.InnerText = "Charlie" $newPerson.appendChild($newName) | Out-NULL $xml.root.AppendChild($newPerson) | Out-Null
✅ 小技巧:
-
$xml.root.person是 PowerShell 自动为根下同名子元素生成的集合属性,方便但不支持复杂筛选; - 真正灵活的查询必须用
.SelectSingleNode()或.SelectNodes()+ XPath。
常见报错和避坑点
-
“Invalid XML” 或 “Data at the root level is invalid”
多半是 XML 字符串开头有空格、BOM、或混入了 PowerShell 注释(如),先Trim()或用-Raw读取。 -
$xml.xxx 返回 null
检查 XML 是否真有那个层级,或是否拼错了标签名(XML 区分大小写)。 -
修改后保存不生效?
[xml]对象修改的是内存中的副本,要写回文件需显式调用:$xml.Save("config.xml")
基本上就这些。[xml] 不复杂,但容易忽略 -Raw 和编码细节,用对了能省掉大量手动解析工作。