PowerShell 操作 xml
来源:互联网 发布:sql安装挂起清除工具 编辑:程序博客网 时间:2024/05/13 15:59
PowerShell作为优秀的服务器管理脚本,操作文件的能力还是非常出色的。XML文件作为最为常见的的系统配置文件,PowerShell 对于 xml 文件操作的支持也是非常强大的。PowerShell 如果希望将 xml 仅仅作为普通的文档处理,只需要使用 Get-Content 命令即可,但是如果系统将 xml 文件作为 xml 来处理(使用操作 xml)的方法,那么我们就需要使用 Get-Content,并且需要将获取的内容强制转化为 xml 类型。
这是按照普通文档类型输出的情况。
<span style="font-family:微软雅黑;">Windows PowerShell版权所有 (C) 2009 Microsoft Corporation。保留所有权利。PS C:\Users\gablet> Get-Content "D:\PowerShell\Books.xml"<?xml version="1.0" encoding="ISO-8859-1"?><Books> <Book year="2011" press="CN">C#</Book> <Book year="2012" press="EN">Java</Book></Books>PS C:\</span><span style="font-family:微软雅黑;">Users\gablet></span>
如果是按照XML来获取,效果如下:
PS C:\Users\gablet> [Xml]$XmlContent = Get-Content "D:\PowerShell\Books.xml"PS C:\Users\gablet> [Xml]$XmlContentxml Books--- -----version="1.0" encoding="ISO-8859-1" BooksPS C:\Users\gablet>
这时候我们发现,我们得到的是一个xml对象,我们可以访问节点的值。
PS C:\Users\gablet> $XmlContent.BooksBook----{Book, Book}PS C:\Users\gablet> $XmlContent.Books.Book[0]year press #text---- ----- -----2011 CN C#PS C:\Users\gablet> $XmlContent.Books.Book[1]year press #text---- ----- -----2012 EN JavaPS C:\Users\gablet> $XmlContent.Books.Book[0].year2011PS C:\Users\gablet> $XmlContent.Books.Book[0].pressCNPS C:\Users\gablet>
怎么样,确实很方便吧?
我们可以直接更新节点的值,示例如下:
PS C:\Users\gablet> $XmlContent.Books.Book[0].year = "2014"PS C:\Users\gablet> $XmlContent.Books.Book[0].year2014PS C:\Users\gablet> $XmlContent.save("D:\PowerShell\Books.xml")PS C:\Users\gablet> [Xml]$XmlContent = Get-Content "D:\PowerShell\Books.xml"PS C:\Users\gablet> $XmlContent.Books.Book[0]year press #text---- ----- -----2014 CN C#PS C:\Users\gablet>
注意,我们读取之后,xml文件存在于内存中,如果不执行方法,不会写入物理文件中。
上述操作xml文件的方法存在一个缺陷,就是节点的位置不能改变,因为我们是通过节点的位置去更新的,有没有一种不依赖于位置的方法呢?这种方法是存在的。
PS C:\Users\gablet> $XmlContent.Books.Book | Where-Object { $_.year -eq "2014"}year press #text---- ----- -----2014 CN C#PS C:\Users\gablet>
使用PowerShell 的 Where-Object 实现查找,我们可以进一步使用管道特性,更新这个节点,这里不再赘述。
除了这种方法以外,PowerShell 操作 xml 支持 查询某个路径下的节点。
PS C:\Users\gablet> $XmlContent.SelectNodes("Books/Book")year press #text---- ----- -----2014 CN C#2012 EN JavaPS C:\Users\gablet>
同样支持根据位置索引来获取节点
PS C:\Users\gablet> $XmlContent.SelectNodes("Books/Book[0]")PS C:\Users\gablet> $XmlContent.SelectNodes("Books/Book[1]")year press #text---- ----- -----2014 CN C#PS C:\Users\gablet> $XmlContent.SelectNodes("Books/Book[2]")year press #text---- ----- -----2012 EN JavaPS C:\Users\gablet>
注意:这里索引是从1开始的,不是0
还可以获取最后,最开始一个
PS C:\Users\gablet> $XmlContent.SelectNodes("Books/Book[last()]")year press #text---- ----- -----2012 EN Java
本章节就介绍到这里,期待继续...
0 0
- PowerShell 操作 xml
- PowerShell操作活动目录
- 使用PowerShell操作快捷方式
- PowerShell 操作bcs
- powershell数据库操作函数
- PowerShell 之文本操作
- PowerShell批量操作
- Powershell 操作SQL Server
- PowerShell 查询操作
- Powershell连接操作SQLSERVER
- Powershell 条件操作符
- PowerShell-6.文件操作
- PowerShell基本操作
- Powershell 操作SQL Server
- powershell数据库操作函数
- Office Powershell Cookbook (Office powershell 常见操作)
- PowerShell 读取xml节点信息
- Parsing XML Files with PowerShell
- LTE科普
- bluestacks 安装电脑上的手机app
- HDU—— 5138 CET-6 test
- [leetcode]Multiply Strings
- 设计模式之三个工厂
- PowerShell 操作 xml
- level-set method vs. immersed boundary method (水平集方法与沉浸元方法比较)
- [ACM] HDU 5139 Formula (离线处理)
- 给Java项目增加验证码支持
- Git忽略已跟踪的文件和删除已入仓库的文件夹
- 第14周OJ平台项目-输出杨辉三角
- java面试题+答案
- 总结过去10年的程序员生涯
- JMeter正则表达式实例