xml - 使用 powershell 更改 xml 文件中的值
问题描述
我目前是系统集成学徒的第一年。因此,编程和脚本在我的日常生活中扮演着较小的角色。我提供这些信息是为了说明我的编程水平,或者说缺乏编程水平。
尽管如此,我的任务是编写一个 powershell 脚本,该脚本将从 csv 文件中收集信息,然后根据所述输入操作 xml 文件。
到目前为止,我的脚本能够读出 csv 文件并打开 xml 进行操作。我的斗争在于所述xml文件本身的结构。结构和摘录如下
结构:
<UserIntentions mediaName="CODE\win_b64\renamed_file.media" mediaVersion="421">
<SetVariable name="component_one" value="true"/>
<SetVariable name="component_two" value="3DPASS_TOMEE_PORT"/>
<SetVariable name="component_three" value="CERTIFICATES_DIR"/>
代码:
[xml]$file = Get-Content -Path $PSScriptRoot"\req\targetfile_Template.xml"
$file.UserIntentions.SetVariable.Value = $value
如您所见,标签一遍又一遍地重复。因此,至少据我了解,我无法使用上面显示的内容,因为我会立即更改所有值。
当然,我之前尝试过 google,但我遇到的所有示例都有一个更精确的 xml 结构,其中标签(?)没有加倍。
我需要能够更改按名称选择的各个条目。为此,我尝试使用 where-object,但没有任何效果,但出现错误。然后,我尝试了以下方法:
if($file.UserIntention.SetVariable.name -eq $intention)
{$file.UserIntention.SetVariable.value = $value}
然而,这具有相同的结果,因为条件只需要满足一次就可以改变。
所以,我希望得到一个解释:如何更改上面结构中的单个值,按名称过滤?请记住,我以前从未使用过 xml,并且几乎没有接触过 powershell。
亲切的问候和非常感谢
解决方案
如果有多个属性符合条件,您可以使用Foreach-Object脚本块来执行此操作。Where将允许您创建过滤条件。
$file.UserIntentions.SetVariable | Where Name -eq $intention | Foreach-Object {
$_.Value = $value
}
推荐阅读
- mdriven - 控制 MDriven 中的默认语言(本地化)
- dart - pubspec.lock 和 pubspec.yaml 之间的区别
- javascript - 从 Fetch 访问响应数据
- c# - 如何从 EntityFrameworkCore DBContext 获取连接?
- python - 根据另一个字典更新字典列表
- javascript - Webpack 未构建,因为 CssSyntaxError
- ms-access - Access Union Query to get Full Outer Join
- c# - 使用 Blazor Web 程序集和 asp.net 核心 Web api 自定义身份服务器
- javascript - 使用脚本删除 django-autocomplete 的选定值
- flutter - 请求解决错误:找不到文件 pubspec.yaml