PowerShell处理XML和HTML的核心是将XML转为[xml]对象进行属性或XPath访问,HTML则用ConvertTo-Html生成报表;原生不支持HTML DOM解析,提取需第三方库。
powershell 在 windows 环境下处理 xml 和 html 数据流,核心在于把它们当作结构化对象而非纯文本。xml 可直接转为 [xml] 对象进行属性式访问或 xpath 查询;html 则通常通过 convertto-html 生成、用正则或解析器(如 htmlagilitypack)提取内容——但原生 powershell 不提供 html dom 解析能力,这点需明确。
加载和解析 XML 文件
推荐使用 [xml] 类型强制转换,简洁且自动校验格式:
- 读取时显式指定编码防乱码:
[xml]$xml = Get-Content "config.xml" -Encoding UTF8 - 大文件或需异常控制时,改用 .NET 原生加载:
$xml = [System.Xml.XmlDocument]::new(); $xml.Load("config.xml") - 加载后可直接点语法访问,如
$xml.root.server.port,但属性需用.GetAttribute("name")或."@name"
用 XPath 高效查询 XML
Select-Xml 是命令行友好型方案,适合脚本中快速提取;而 .SelectSingleNode() 和 .SelectNodes() 更适合在已加载的 [xml] 对象上复用:
- 查单个值:
(Select-Xml -Path "app.config" -XPath "//add[@key='Timeout']").Node.InnerText - 查多个节点并遍历:
$xml.SelectNodes("//user") | ForEach-Object { $_.username.InnerText } - 带命名空间必须注册前缀:
$ns = @{msb="http://schemas.microsoft.com/developer/msbuild/2003"}; Select-Xml -Xml $xml -XPath "//msb:PropertyGroup" -Namespace $ns
修改并保存 XML 内容
所有修改都在内存中进行,不调用 .Save() 就不会写入磁盘:
- 改文本:
$node.InnerText = "new value" - 设属性:
$node.SetAttribute("enabled", "true") - 删节点:
$node.ParentNode.RemoveChild($node) - 新增节点:
$new = $xml.CreateElement("log"); $xml.root.AppendChild($new) | Out-Null - 保存:
$xml.Save("config.xml")(会重写格式)或$xml.OuterXml | Set-Content "new.xml" -Encoding UTF8
生成与美化 HTML 报表
PowerShell 原生不解析 HTML,但能高效生成带样式的报表:
立即学习“前端免费学习笔记(深入)”;
- 用
ConvertTo-Html转换对象为表格:Get-Service | ConvertTo-Html -Property Name, Status, StartType - 嵌入 CSS 控制外观:
$css = @"<style>table { border-collapse: collapse; } th { background: #4CAF50; }</style>"@; ConvertTo-Html -Head $css | Set-Content report.html - 若需从现有 HTML 中提取数据(如抓取网页字段),需引入第三方库如 HtmlAgilityPack,PowerShell 本身无内置 DOM 查询能力



















