当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

作者:精品下载站 日期:2024-12-14 04:47:35 浏览:14 分类:玩电脑

PowerShell XML 解析 |快速浏览 PowerShell XML 解析


[玩转系统] 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

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell 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"

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

另一种导航方法是使用 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"

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

获得上述输出后,我们需要扩展 Node 属性。

代码:

Select-Xml -Xml $xmldoc -XPath "/catalog" | Select -ExpandProperty Node

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

例子#2

使用 SelectNodes 方法。

我们可以使用 SelectNodes 方法从 XML 文件中进行搜索,而不是使用 Select-XML 方法。

代码:

$xmldoc = [xml](Get-Content C:\Temp\books.xml)
$xmldoc.SelectNodes("/catalog")

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

在上面的例子中,“/”提到了从根节点进行选择。在根节点,我们只有“目录”节点可用。如果我们使用“Book”节点,它不会给出任何输出,因为它不在根级别。

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

当我们在 xPath 方法中使用“//”语法时,它会从整个文档中选择该节点,无论它们位于何处。

代码:

PS C:\> $xmldoc.SelectNodes("//catalog")

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

这将搜索所有目录节点。

与上面的命令类似。

代码:

Select-Xml -Xml $xmldoc -XPath "//catalog" | Select -ExpandProperty Node

代码:

$xmldoc.catalog

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

从 XML 文件中选择所有书籍。

代码:

$xmldoc.SelectNodes("//book")

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

类似命令

代码:

Select-Xml -Xml $xmldoc -XPath "//book" | Select -ExpandProperty Node

代码:

$xmldoc.catalog.book

从文件中选择所有作者。

代码:

$xmldoc.SelectNodes("//author")

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

类似命令

代码:

Select-Xml -Xml $xmldoc -XPath "//author" | Select -ExpandProperty Node

代码:

$xmldoc.catalog.Book.author

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

例子#3

使用 SelectSingleNode 方法。

SelectSingleNode方法是获取特定节点的输出。默认情况下,如果未提及索引且索引在 XML 中从 1 开始,则此命令会选择数组中的第一个输出。

代码:

$xmldoc.SelectSingleNode('//book')

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

该命令类似于,

代码:

$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"

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

备用命令

代码:

$xmldoc.catalog.book[2].author

或者

Select-Xml -Xml $xmldoc -XPath "//book[2]/author" | Select -ExpandProperty Node

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

例子#4

选择特定属性。

在此示例中,我们将选择一个特定属性。我们需要在这里选择图书 ID 为 bk103 的节点。

代码:

$xmldoc.SelectNodes( "//book[@id='bk103']" )

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

您还可以使用 Select-XML 和 dotnet 方法的替代命令,如下所示。

代码:

Select-Xml -Xml $xmldoc -XPath("//book[@id='bk103']") | Select -ExpandProperty Node

或者

$xmldoc.catalog.book | where {$_.id -eq 'bk103'}

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

例子#5

选择多个元素。

要选择多个元素,我们可以使用以下命令。

代码:

$xmldoc.SelectNodes("//book/title | //book/author")

或者

$xmldoc.SelectNodes("//title | //author")

上面的命令从 XML 文件中选择标题和作者。

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

类似命令

代码:

Select-Xml -Xml $xmldoc -XPath ("//title | //author") | Select -ExpandProperty Node
$xmldoc.catalog.book | Select Title, Author

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

例子#6

单点和双点语法 Xpath。

在 XPath 语法中,点 (.) 表示当前节点,双点 (..) 表示当前节点的父节点。

代码:

$xmldoc.SelectSingleNode("//catalog/.")

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

上面的例子代表当前节点。

代码:

$xmldoc.SelectSingleNode("//catalog/..")

输出:

[玩转系统] PowerShell XML 解析 |快速浏览 PowerShell XML 解析

上面的例子代表父节点。

结论

PowerShell XML 解析方法在处理 XML 文档时非常有用,因此一旦在应用程序中使用它,应用程序可以更轻松地快速搜索和导航较大的文档,而且 Web 处理速度也非常快。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯