应用PowerShell读取XML文件

日期: 2015-11-23 作者:Adam Bertram翻译:朱文浩 来源:TechTarget中国 英文

对不少IT人士和系统管理员来说,扩展标记语言(Extended Markup Language)一直是笼罩着神秘色彩的一个话题。一般来说,IT人士并不需要了解关于XML的文档、标签、属性和命名空间等这些内容。但随着DevOps的兴起,运行环境中的代码成为一种基础设置并对配置管理有着重要促进作用,许多管理员开始在自己的脚本任务中尝试使用XML。 管理Windows系统离不开PowerShell。

与其他很多语言一样,PowerShell提供创建、修改和读取XML文件的原生支持。在PowerShell中有多种方式读取XML文件,但其中最简单的是转换一个变量至另一个类型。 类型转换(Typecasti……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

对不少IT人士和系统管理员来说,扩展标记语言(Extended Markup Language)一直是笼罩着神秘色彩的一个话题。一般来说,IT人士并不需要了解关于XML的文档、标签、属性和命名空间等这些内容。但随着DevOps的兴起,运行环境中的代码成为一种基础设置并对配置管理有着重要促进作用,许多管理员开始在自己的脚本任务中尝试使用XML。

管理Windows系统离不开PowerShell。与其他很多语言一样,PowerShell提供创建、修改和读取XML文件的原生支持。在PowerShell中有多种方式读取XML文件,但其中最简单的是转换一个变量至另一个类型。

类型转换(Typecasting)是用来描述将变量从一种类型转换为另一种类型的术语。用PowerShell完成此过程非常简单。PowerShell提供内建的XML的类型加速器(type accelerator)。类型加速器是一种转换变量至其他类型的快捷方式。要转换名为$MyVariable的变量,你可以简单地添加[xml]标签到这个变量的前面即可。

[xml]$XmlDocument

上述标记只能创建一个空变量。你需要将XML放入变量中,读取一份已存在的XML文档,使用Get-Content命令并指向一个XML文件。例如,如果某个XML文件中列出了几种不同的汽车,在PowerShell你需要使用这样的命令来读取文件:

[xml]$XmlDocument = Get-Content -Path C:Cars.xml

此操作将C:Cars.xm文件中的文字赋值给变量$XmlDocument,并自动将其转换为一个System.Xml.XmlDocument类型变量。当变量变成这种格式,我们就可以借助PowerShell的点符号方法读取其中的数据。

在进行这项操作前,图1中我们看到C:Cars.xml文件里面包含着不同的汽车制造商、型号和其他属性。

图1. XML文件显示汽车制造商和其他详情
图1. XML文件显示汽车制造商和其他详情

图2中显示的是我所创建的名为$XmlDocument的变量,该变量的类型及其所包含的内容。

图2. 创建和设计变量
图2. 创建和设计变量

点符号通过将每个节点看做父节点和子节点,使阅读文档和探索XML树更加容易。例如,像在图2中那样输入变量后显示的内容,可以展现文档中所有子元素的父级元素。要深入研究和挖掘文档中有多少汽车,像在图3那样添加父元素的名字到变量中即可。

图3. 将父级元素的名字添加到变量中来展现XML文档中的汽车数量
图3. 将父级元素的名字添加到变量中来展现XML文档中的汽车数量

例子中展示了汽车父级元素下3种不同的子元素汽车。为了更加深入地挖掘XML中是哪一种汽车,按照图4再次将元素名添加到尾部。

图4. 添加元素名字以展现XML文件中更多关于元素的详细信息
图4. 添加元素名字以展现XML文件中更多关于元素的详细信息

注意上述例子中的ft——汽车特性。这些特性将所有属性聚到一起,因此它们不会跨越控制台,这些与读取XML文档并不相关。

元素或标签本质上是指代某一新事物的标签,在本例中是指汽车。然而,汽车也有自己的属性。汽车的制造商和型号是XML的属性。当使用点符号时,PowerShell并不关心元素和属性的区别,将他们显示在同一张表中。这就使得很容易导航整个XML文档的树形结构,但是为什么知道自己想要什么?如果你想搜索一种特定类型的汽车,你将无需为每个子元素都输入点。

当你遇到一个有几十层元素的XML文档时怎么办呢?如果你需要搜索XML文档,有几种选择。因为PowerShell转换文件为对象,您可以使用Where-Object 命令并按照图5过滤它们。很多初学者都会使用这种方法,因为它与现有方法很相近,比其他方法更容易操作,但更难理解。

图5. 使用Where-Object命令过滤XML文件中的对象
图5. 使用Where-Object命令过滤XML文件中的对象

较大XML文件的访问方法

如果你需要读取一个较大的XML文件,点符号并非最佳方法。应利用其他方法诸如Select-XML命令或XPath,就像搜索数据库那样搜索一个XML文件而非使用点符号。

作者

Adam Bertram
Adam Bertram

自由撰稿人

相关推荐