PowerShell XML 解析 |快速浏览 PowerShell XML 解析
PowerShell XML 解析简介
以下文章提供了 PowerShell XML 解析的概述。 XML 解析是连接到 XML 文档并读取文档内容、过滤特定 XML 文档、导航到节点并验证 XML 文档的库或过程。 PowerShell 使用 Select-XML 命令行来解析文档。反过来,它使用 XPath(XML 路径)方法和另一种称为 .Net 方法的方法来解析 XML 文档,以便于 XML 文档的搜索和可读性。
PowerShell XML 解析的语法
下面给出了提到的语法:
Select-Xml
[-Xml] <XmlNode[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]Select-Xml
[-Path] <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]Select-Xml
-LiteralPath <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]Select-Xml
-Content <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]上面 4 种不同提到一次只能使用一对。就像我们不能同时使用 -LiteralPath 和 -Content 参数一样。它们可以以与所提到的相同的组合使用。
如何在PowerShell中执行XML解析?
众所周知,XML 解析是分析 XML 文档、语法和导航节点。 XML 使用 Select-XML 命令行或 .Net 方法。
假设我们有一个如下所示的示例 XML 文件:
示例 XML 文件的部分内容取自 MS 网站。
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms762271(v=vs.85)
代码:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
</catalog>要使用 XML 内容,我们首先需要以 XML 格式传递内容。如果我们使用简单的 Get-Content 命令,它不会是实际的 XML 格式,而是原始内容。
代码:
Get-Content C:\Temp\books.xml输出:
要使用 Select-XML 方法或 DotNet 方法,我们需要将原始文件转换为 XML 格式。
有两种方法可以将文件转换为 XML。
- 类型转换
$xmldoc = [xml](Get-Content C:\Temp\books.xml)- 使用添加类型方法
$xml = New-Object -TypeName XML
$xml.Load('C:\Temp\books.xml')
当我们使用Select-XML方法时,XPath是必需的。
使用 XPath 选择根节点(目录)。
代码:
Select-Xml -Xml $xml -XPath "/catalog"输出:
另一种导航方法是使用 DotNet 方法。
代码:
$xml.catalog
book
----
{book, book, book}PowerShell XML 解析示例
下面给出了提到的示例:
例子#1
展开根节点。
用Select-XML方法展开根或第一个父节点(目录)。
代码:
$xmldoc = [xml](Get-Content C:\Temp\books.xml)
Select-Xml -Xml $xmldoc -XPath "/catalog"输出:
获得上述输出后,我们需要扩展 Node 属性。
代码:
Select-Xml -Xml $xmldoc -XPath "/catalog" | Select -ExpandProperty Node输出:
例子#2
使用 SelectNodes 方法。
我们可以使用 SelectNodes 方法从 XML 文件中进行搜索,而不是使用 Select-XML 方法。
代码:
$xmldoc = [xml](Get-Content C:\Temp\books.xml)
$xmldoc.SelectNodes("/catalog")输出:
在上面的例子中,“/”提到了从根节点进行选择。在根节点,我们只有“目录”节点可用。如果我们使用“Book”节点,它不会给出任何输出,因为它不在根级别。
当我们在 xPath 方法中使用“//”语法时,它会从整个文档中选择该节点,无论它们位于何处。
代码:
PS C:\> $xmldoc.SelectNodes("//catalog")输出:
这将搜索所有目录节点。
与上面的命令类似。
代码:
Select-Xml -Xml $xmldoc -XPath "//catalog" | Select -ExpandProperty Node和
代码:
$xmldoc.catalog输出:
从 XML 文件中选择所有书籍。
代码:
$xmldoc.SelectNodes("//book")输出:
类似命令
代码:
Select-Xml -Xml $xmldoc -XPath "//book" | Select -ExpandProperty Node和
代码:
$xmldoc.catalog.book从文件中选择所有作者。
代码:
$xmldoc.SelectNodes("//author")输出:
类似命令
代码:
Select-Xml -Xml $xmldoc -XPath "//author" | Select -ExpandProperty Node和
代码:
$xmldoc.catalog.Book.author输出:
例子#3
使用 SelectSingleNode 方法。
SelectSingleNode方法是获取特定节点的输出。默认情况下,如果未提及索引且索引在 XML 中从 1 开始,则此命令会选择数组中的第一个输出。
代码:
$xmldoc.SelectSingleNode('//book')输出:
该命令类似于,
代码:
$xmldoc.SelectSingleNode('//book[1]')或者
Select-Xml -Xml $xmldoc -XPath "//book[1]" | Select -ExpandProperty Node或者
$xmldoc.catalog.book[1]- 选择另一个节点:
假设我们要选择第二本书作者,我们可以使用下面的例子。
代码:
$xmldoc.SelectSingleNode("//book[2]/author")
Select-Xml -Xml $xmldoc -XPath "//book[2]/author"输出:
备用命令
代码:
$xmldoc.catalog.book[2].author或者
Select-Xml -Xml $xmldoc -XPath "//book[2]/author" | Select -ExpandProperty Node输出:
例子#4
选择特定属性。
在此示例中,我们将选择一个特定属性。我们需要在这里选择图书 ID 为 bk103 的节点。
代码:
$xmldoc.SelectNodes( "//book[@id='bk103']" )输出:
您还可以使用 Select-XML 和 dotnet 方法的替代命令,如下所示。
代码:
Select-Xml -Xml $xmldoc -XPath("//book[@id='bk103']") | Select -ExpandProperty Node或者
$xmldoc.catalog.book | where {$_.id -eq 'bk103'}输出:
例子#5
选择多个元素。
要选择多个元素,我们可以使用以下命令。
代码:
$xmldoc.SelectNodes("//book/title | //book/author")或者
$xmldoc.SelectNodes("//title | //author")上面的命令从 XML 文件中选择标题和作者。
输出:
类似命令
代码:
Select-Xml -Xml $xmldoc -XPath ("//title | //author") | Select -ExpandProperty Node$xmldoc.catalog.book | Select Title, Author输出:
例子#6
单点和双点语法 Xpath。
在 XPath 语法中,点 (.) 表示当前节点,双点 (..) 表示当前节点的父节点。
代码:
$xmldoc.SelectSingleNode("//catalog/.")输出:
上面的例子代表当前节点。
代码:
$xmldoc.SelectSingleNode("//catalog/..")输出:
上面的例子代表父节点。
结论
PowerShell XML 解析方法在处理 XML 文档时非常有用,因此一旦在应用程序中使用它,应用程序可以更轻松地快速搜索和导航较大的文档,而且 Web 处理速度也非常快。




















