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

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

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

PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?


[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

PowerShell XML 简介

可扩展标记语言 (XML) 是一种类似于 HTML 的软轻量级标记语言,它定义了一组规则,用于以人类可读和机器可读的格式对文档进行编码,并用于存储和传输数据。这种语言是自描述性的,因此 PowerShell 通常使用 XML 来从网页检索数据、修改内容并将其发布回网站,甚至许多应用程序配置都是 XML 格式,以便于应用程序处理数据机器可以轻松地被人类理解和修改。

语法

XML 格式:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<child>
<subchild>.....</subchild>
</child>
</root>

Select-XML cmdlet 语法:

Select-Xml
[-Xml] <XmlNode[]>
[-Path] <String[]>
-LiteralPath <String[]>
-Content <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]

ConvertTo-XML 语法:

ConvertTo-Xml
[-Depth <Int32>]
[-InputObject] <PSObject>
[-NoTypeInformation]
[-As <String>]
[<CommonParameters>]

XPath 语法:

这不仅适用于 PowerShell,而且是全局 XPath 语法,并且 XPath 是 XSLT 标准中的主要元素。 XPath 对于从 XML 文件检索数据非常有帮助。

Expression

描述

NodeName

选择名称为“NodeName”的所有节点

/

从根节点选择

//

从整个文档中选择带有该标签的节点

.

选择当前节点

..

选择当前节点的父节点

@

选择属性

PowerShell 中的 XML 如何工作?

PowerShell 可以非常有效地处理 XML 文件。 PowerShell 有两种从 XML 文件检索数据的方法。

  • XPath
  • 点法

为了将文件转换为 XML,

  • 转换为 XML

在开始进一步解释之前,我们将在本文中使用 Microsoft 的示例文件 (Books.xml) 来读取 XML 数据。

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms762271(v=vs.85)?redirectedfrom=MSDN

1. 从 XML 文件中检索数据

  • 加载 XML 文件

要将 XML 文件加载到 PowerShell 中,我们可以使用 First Get-Content 命令,然后将其类型转换为 XML,如下所示。

$file = [XML](Get-Content C:\Temp\SampleXML.xml)

或者

[XML]$file = Get-Content C:\Temp\SampleXML.xml

您还可以通过创建 XML 对象类型然后加载 XML 文件来加载 XML。例如,

$xml = New-Object -TypeName XML
$xml.Load('C:\Temp\SampleXML.xml')
$xml.Load('C:\Temp\SampleXML.xml')

在上述情况下,您将得到如下输出,

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

要检查 XML 操作支持哪些方法,可以使用 Get-Member 命令检查方法,如下所示。

$xml | Get-Member

a. XPath方法

要使用 XPath 方法,我们可以使用语法部分中显示的表。首先,要从整个文档中检索单个节点的数据,我们可以使用以下命令语法。

$xml.SelectNodes("//NodeName")

在此示例中,我们有书籍、作者、标题、流派等节点。我们可以选择其中任何一个。

$file.SelectNodes('//genre')

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

请注意,XML 操作区分大小写。

要选择单个节点,我们可以使用 SelectSingleNode() 方法。

$xml.SelectSingleNode('//title')

这将从第一个节点选择数据。要选择不同的节点,我们需要提供数组编号。在 PowerShell 中,数组以 [0] 开头,但在 XML 中,它以数字 1、2、3 等开头。

$xml.SelectSingleNode('//catalog/book[2]')

上述命令将从主目录中选择第 2 本书。

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

选择以下节点。

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

也可以不指定父节点,直接使用该命令。

$xml.SelectSingleNode('//book[2]')

要使用获取上述输出,我们还可以使用 Select-XML 命令,其工作方式与上述命令相同。例如,

Select-Xml -Xml $xml -XPath "//catalog/book[2]" | Select -ExpandProperty Node

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

您还可以进一步扩展,如下所示。

$xml.SelectSingleNode('//catalog/book[2]/author')

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

b.点法

这种方法是众所周知的,我们每天都在 PowerShell 中使用。我们已经在本节开头加载了 XML 文档。我们现在将使用 Dot 方法。

以下命令将从 XML 文档中检索第 2 本书。

这是我们的示例 XML 文档。

PS C:\> $xml
xml           catalog
---           -------
version="1.0" catalog
Command to retrieve book number:2
$xml.catalog.book[2]

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

2. 转换为XML文件

要将任何可能的输出转换为 XML,您可以使用 ConvertTo-XML 命令。

$services = Get-Service | ConvertTo-Xml
$services = Get-Service | ConvertTo-Xml
$services

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

为了进一步扩展,我们可以使用任何方法(Xpath 或 Dot 方法)。例如,

$services.Objects.Object[1] | Select -ExpandProperty Property

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

示例

以下是下面提到的示例

1. 加载XML的全部内容

使用以下命令加载整个 XML

$xml = [xml](Get-Content C:\Temp\SampleXML.xml)
$xml.SelectNodes('/catalog') | Select -ExpandProperty Book

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

2. 搜索特定属性

要搜索特定属性,我们可以使用以下命令。它将搜索图书 ID“bk112”。

$xml.SelectNodes('//catalog/book') | where{$_.id -eq 'bk112'}

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

3. 使用点法查找属性

上面的例子也可以通过Dot方法来写,如下所示。

$xml.catalog.book |where{$_.id -eq "bk112"}

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

4. 在文件中添加新元素

我们将把新元素添加到现有文件中。

$file = 'C:\Temp\SampleXML.xml'
$xml = [xml](Get-Content $file)

以下命令将在 XML 文件中创建一个名为“Book1”的新元素。

$newelement = $xml.CreateElement("Book1")
$newelement

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

创建后,第二个任务是将其附加到现有文档中。

$xml.catalog.AppendChild($newelement)

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

添加元素后,下一步是使用以下命令保存文件。

$xml.Save($file)

现在让我们测试一下新元素是否出现在 XML 文档中。

$xml.catalog

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

5.创建新节点并设置其属性

在此示例中,我们将添加一本新书,名称为“XML 简介”,代码如下。

$file = "C:\temp\SampleXML.xml"
$xml = [xml](Get-Content $file)
$newbookelement = $xml.catalog.AppendChild($xml.CreateElement("book"))
$newbookelement.SetAttribute("id","bk113")
$newAuthorelement = $newbookelement.AppendChild($xml.CreateElement("author"))
$newAuthorelement.AppendChild($xml.CreateTextNode("Dan Harley")) | Out-Null
$newtitleelement = $newbookelement.AppendChild($xml.CreateElement("title"))
$newtitleelement.AppendChild($xml.CreateTextNode("XML Introduction")) | Out-Null
$xml.Save(($file))

输出:

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

您还可以在 XML 文件中检查相同内容。

[玩转系统] PowerShell XML |了解 PowerShell 中的 XML 是如何工作的?

结论

XML 文件是提供配置数据的最佳方式。大多数应用程序使用 XML 文件进行配置,甚至与 RestAPI 方法进行交互,许多网站都使用 XML 作为 API 输出。

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

取消回复欢迎 发表评论:

关灯