PowerShell 学习笔记:操作XML文件

news2024/9/20 9:05:07

XML文件是有一定格式要求的文本文件。

百度百科
可扩展标记语言 (Extensible Markup Language, XML) , 标准通用标记语言 的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点。

参考文档

基本特点:

  1. XML是一个树形数据结构

  1. XML有且只有一个根节点

  1. XML有0个或多个子节点

  1. 把XML看作对象,则XML对象具有根节点属性,同时根节点有0个或多个子节点属性

  1. 每个节点一定包含节点名称,节点中可以包含属性也可以不包含属性

如下Delphi工程中的.dproj部分XML文件结构(VCL_DEMO.dproj):

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <ProjectGuid>{A524FB1B-A9A8-4FB6-A680-1D05B7B5E1BF}</ProjectGuid>
        <ProjectVersion>19.5</ProjectVersion>
        <FrameworkType>VCL</FrameworkType>
        <Base>True</Base>
        <Config Condition="'$(Config)'==''">Debug</Config>
        <Platform Condition="'$(Platform)'==''">Win64</Platform>
        <TargetedPlatforms>3</TargetedPlatforms>
        <AppType>Application</AppType>
        <MainSource>VCL_DEMO.dpr</MainSource>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
        <Base>true</Base>
    </PropertyGroup>
<Project>

PowerShell 解析操作XML文件,使用XML对象:

# 定义xml对象
$xml = New-Object -TypeName xml

# 查看 $xml 对象的所有方法和属性
Get-Member -InputObject $xml

关于$xml对象包含的操作方法如下:

 TypeName:System.Xml.XmlDocument

Name                        MemberType
----                        ----------
ToString                    CodeMethod
AppendChild                 Method
Clone                       Method
CloneNode                   Method
CreateAttribute             Method
CreateCDataSection          Method
CreateComment               Method
CreateDocumentFragment      Method
CreateDocumentType          Method
CreateElement               Method
CreateEntityReference       Method
CreateNavigator             Method
CreateNode                  Method
CreateProcessingInstruction Method
CreateSignificantWhitespace Method
CreateTextNode              Method
CreateWhitespace            Method
CreateXmlDeclaration        Method
Equals                      Method
GetElementById              Method
GetElementsByTagName        Method
GetEnumerator               Method
GetHashCode                 Method
GetNamespaceOfPrefix        Method
GetPrefixOfNamespace        Method
GetType                     Method
ImportNode                  Method
InsertAfter                 Method
InsertBefore                Method
Load                        Method
LoadXml                     Method
Normalize                   Method
PrependChild                Method
ReadNode                    Method
RemoveAll                   Method
RemoveChild                 Method
ReplaceChild                Method
Save                        Method
SelectNodes                 Method
SelectSingleNode            Method
Supports                    Method
Validate                    Method
WriteContentTo              Method
WriteTo                     Method
Item                        ParameterizedProperty

每个方法的具体使用可以查询 System.Xml.XmlDocument 的相关资料。

#! PowerShell 操作XML
<#
 @ parse_xml.ps1
 @ 解析 xml
 @ by sensor
#>

# 输入/输出
$input_xmlfile = Join-Path $PSScriptRoot 'VCL_DEMO.dproj'

# 定义xml对象
$xml = New-Object -TypeName xml

try {
    # 调用xml的load方法导入xml文件,若输入为字符串使用loadxml
    $xml.Load($input_xmlfile)
    #获取根节点
    $root=$xml.FirstChild

    if ($null -ne $root) { # 判断是否存在根节点Project
        $Project_xmlns = if ($null -ne $root.xmlns) {$root.xmlns} #获取xmlns属性
        if ($null -ne $Project_xmlns) { # 判断是否存在子节点PropertyGroup
            Write-Output "Prject的xmlns属性: $Project_xmlns"

            #获取根节点的所有子节点列表
            $PropertyGroup = $root.ChildNodes
        
            # 遍历PropertyGroup节点的所有子节点,获取相应属性
            $PropertyGroup | ForEach-Object {
            # 查找一个没有属性的节点        
            $value =  $_.HasAttributes 
            if ($value -eq $False){ # 没有任何属性的节点
                $_.ChildNodes  | ForEach-Object{
                   # 显示出来
                   $_.name + '   ' + $_.innerText
                   # 修改 FrameworkType 节点的值为 FMX
                   if($_.name -eq 'FrameworkType'){$_.innerText = 'FMX'}
                 }
            }         
        }
     }
    }
    # 保存修改
    $xml.Save($input_xmlfile)
}
catch {
    # 如果输入文件$input_file非xml格式则无法转换为xml
    throw "无法解析 ${input_file} 为XML 文件"
}

运行后,会将FrameworkType子节点更改为FMX

以上演示了PowerShell 操作XML文件方法,最主要的是需要学会查询文档

今天是大年初三,再祝大家新年快乐,开心如意!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/177947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

adversarial Learning and attacks 学习笔记

GANs大家是比较熟悉的网络结构&#xff0c;adversarial attacks 也不是很新的概念了。近期的工作有涉及到adversarial attacks&#xff0c;故整理一下学习的内容。 Adversarial Attacks 对抗攻击样本&#xff1a;一张正常的大熊猫图片&#xff08;左图&#xff09;在被加入噪…

Leetcode.1828 统计一个圆中点的数目

题目链接 Leetcode.1828 统计一个圆中点的数目 题目描述 给你一个数组 points&#xff0c;其中 points[i] [xi, yi] &#xff0c;表示第 i个点在二维平面上的坐标。多个点可能会有 相同 的坐标。 同时给你一个数组 queries&#xff0c;其中 queries[j] [xj, yj, rj]&#x…

Feign入门

Feign入门Feign入门Feign代替RestTemplate自定义配置Feign使用优化最佳实践Feign入门 Feign代替RestTemplate RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http://userservice/user/" order.ge…

linux(Debian11)安装后安装无线网卡等驱动

在工作和生活中&#xff0c;我们经常会用到linux系统&#xff0c;debian作为一个老牌的程序员常用发行版&#xff0c;自然成为我们的首选。 下面记录一下&#xff0c;安装无线网卡的过程。 首先&#xff0c;可以通过命令查看自己所需要的驱动 lspci -vvv iwlwifi 就是我所需…

机器学习为什么使用归一化? 有哪些归一化算法?

一、归一化的基本介绍 1. Why 归一化? 一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。或者举一个更浅显的例子:对房子进行…

Java——组合总和(3)

题目链接 leetcode在线oj——组合总和&#xff08;3&#xff09; 题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff…

计算机网络 —— TCP篇 TCP 重传、滑动窗口、流量控制、拥塞控制

计算机网络系列文章目录 TCP篇 TCP 重传、滑动窗口、流量控制、拥塞控制 文章目录计算机网络系列文章目录前言4.2 TCP 重传、滑动窗口、流量控制、拥塞控制4.2.1 重传机制超时重传什么情况会触发超时重传超时时间应该设置为多少呢&#xff1f;快速重传SACKD-SACK4.2.2 滑动窗…

【数据结构之二叉树系列】万字深剖数据结构---堆

目录前言一、堆二、堆的实现(重点)1. 数据类型重定义2. 堆结构的定义3. 堆结构的重定义三、堆中常见的基本操作&#xff08;重点&#xff09;1. 声明2. 定义&#xff08;1&#xff09;初始化&#xff08;2&#xff09;销毁&#xff08;3&#xff09;插入数据&#xff08;4&…

macOS Monterey 12.6.3 (21G419) 正式版 ISO、IPSW、PKG 下载

macOS Monterey 12.6&#xff0c;皆为安全更新&#xff0c;不再赘述。 macOS Monterey 12.6&#xff0c;发布于 2022 年 9 月 12 日&#xff08;北京时间今日凌晨&#xff09;&#xff0c;本次为安全更新。 今日&#xff08;2022-07-21&#xff09;凌晨&#xff0c;Apple 终于…

ATAC-seq分析:Peak Calling(8)

1. 寻找开发区域 ATACseq 的一个共同目标是识别转录因子结合和/或转录机制活跃的无核小体区域。该核小体游离信号对应于小于一个核小体的片段&#xff08;如 Greenleaf 论文中定义 < 100bp&#xff09;。 然而&#xff0c;为了识别开放的染色质&#xff0c;我们可以简单地使…

意想不到的结果:Foo(m)可能是在定义名为m的对象

文章目录例一&#xff1a;Foo(m); 是定义名为 m 的对象例二&#xff1a;Foo(m).i; 传入实参 m例三&#xff1a;func(Foo(m)); 传入实参 m例四&#xff1a;S(cout)(1) 定义名为 cout 的对象例五&#xff1a;S(std::cout)(1) 传入实参 std::cout你知道吗&#xff0c;如果 Foo 是…

vue3 watch 监听响应式数据变化

主要是用来监听ref 或者reactive 所包裹的数据才可以被监听到 <template><input type"text" v-model"message"> </template> <script setup lang"ts">import {ref, watch} from "vue";let message ref<s…

powerdesigner画UML组件图初步

组件图 组件图是用来描述组件与组件之间关系的一种UML图&#xff0c;组件图在宏观层面上显示了构成系统某一特定方面的实现结构。 组件图可以用来显示组件之间的依赖关系&#xff0c;以及组件的接口和调用关系。 组件图由组件&#xff0c;接口&#xff0c;组件图中的关系&…

20230124英语学习

Why Do We Still Procrastinate Despite It Causing So Much Stress? 明知道拖延不好&#xff0c;为何还会拖延&#xff1f; Are you procrastinating?I am.I have been delaying writing this article for the last few days even though I knew I had a deadline. I have …

从零到一:复现 DIR-815 栈溢出漏洞

从零到一&#xff1a;复现 DIR-815 栈溢出漏洞 实验环境 执行命令uname -a可以查看到当前系统版本 我这边采用桥接模式进行实验。 环境搭建 文章命令操作均在root下操作&#xff0c;且git clone xxxx.git下载所用到工具都均下载保存到/opt/tools/文件夹下&#xff0c;方便统…

OKC和802.11R的知识小科普

欢迎来到东用知识小课堂&#xff01;1.什么是漫游简单来说&#xff0c;就是设备从一个AP&#xff0c;连接到另一个AP。IP地址不需要重新申请。整个过程需要尽可能快的进行&#xff0c;否则对于用户而言&#xff0c;就会发现网络出现卡顿。而为了安全&#xff0c;网络的认证过程…

【Python】使用pyinstaller打包py程序为exe应用程序时,出现“Tcl报错闪退”的解决办法

问题概述 使用pyinstaller -F的命令进行py程序转为exe程序时&#xff0c;打包后的exe程序会出现闪退报错的情况&#xff1a; 解决办法 1. 检查“环境变量”tcl和tk是否配置好&#xff1a; 查看系统高级设置>>>环境变量>>>系统变量 博主使用anaconda进行p…

河道污染物识别系统 python

河道污染物识别系统通过pythonyolo深度学习技术&#xff0c;对现场画面中河道污染物以及漂浮物进行全天候实时监测&#xff0c;当监测到出现污染物漂浮物时&#xff0c;立即抓拍存档触发告警。与C / C等语言相比&#xff0c;Python速度较慢。也就是说&#xff0c;Python可以使用…

计算机组成原理 | 第一章:概论

文章目录&#x1f4da;冯诺依曼计算机的特点&#x1f4da;计算机硬件组成框图&#x1f4da;计算机硬件的主要技术指标&#x1f407;非时间指标&#x1f407;时间指标&#x1f511;计算技巧归纳&#x1f4da;小结&#x1f511;本章掌握要点&#x1f407;补充思考题&#x1f4da;…

Froala Editor内容中删除内联样式

Froala Editor内容中删除内联样式 易于集成-编辑器可以在任何时间内集成到任何类型的项目中。它只需要基本的JavaScript和HTML编码知识。 流行-HTML编辑器在开发人员中很流行&#xff0c;它有最流行的开发框架的插件。 易于升级-将所有自定义内容与编辑器文件夹分开&#xff0c…