powershell - 如何在循环内正确选择已处理的 XML 元素(使用 PowerShell)
问题描述
我有以下包含 XML 数据的 PowerShell 代码:
[xml]$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
<Sequences>
<Sequence>
<SequenceName>Sequence-A</SequenceName>
<SequenceNumber>01</SequenceNumber>
<Package>
<PackageFolder>Package-A</PackageFolder>
<PackageNumber>01</PackageNumber>
</Package>
<Package>
<PackageFolder>Package-B</PackageFolder>
<PackageNumber>02</PackageNumber>
</Package>
</Sequence>
<Sequence>
<SequenceName>Sequence-B</SequenceName>
<SequenceNumber>02</SequenceNumber>
<Package>
<PackageFolder>Package-C</PackageFolder>
<PackageNumber>01</PackageNumber>
</Package>
<Package>
<PackageFolder>Package-D</PackageFolder>
<PackageNumber>02</PackageNumber>
</Package>
</Sequence>
</Sequences>
"@
Clear-Host
( $Xml.Sequences.Sequence | Sort-Object SeqenceNumber | Select-Object -First 1 ).Package | ForEach-Object {
$xml.Sequences.SelectSingleNode( $_.PackageFolder )
}
如您所见,我遍历了 XML 中定义的 Sequence-A 中的包。我想向已处理的包中添加一个新的文本元素,例如:
<Package>
<PackageFolder>Package-A</PackageFolder>
<PackageNumber>01</PackageNumber>
<PackageProcessed>True</PackageProcessed>
</Package>
为此,我需要选择正确的节点。
在一个简单的沙箱中,我使用了类似的东西:
$xml.xxxx.SelectSingleNode("Package")
Ofc 它不是这样工作的,我正在寻找一种方法来定位/选择循环内当前处理的节点。
我不认为,搜索 PackageFolder-name 会有用,因为它可能不是唯一的。
谢谢
解决方案
它似乎是这样工作的:
[xml]$Xml = @"
<?xml version="1.0" encoding="utf-8"?>
<Sequences>
<Sequence>
<SequenceName>Sequence-A</SequenceName>
<SequenceNumber>01</SequenceNumber>
<Package>
<PackageFolder>Package-A</PackageFolder>
<PackageNumber>01</PackageNumber>
</Package>
<Package>
<PackageFolder>Package-B</PackageFolder>
<PackageNumber>02</PackageNumber>
</Package>
</Sequence>
<Sequence>
<SequenceName>Sequence-B</SequenceName>
<SequenceNumber>02</SequenceNumber>
<Package>
<PackageFolder>Package-C</PackageFolder>
<PackageNumber>01</PackageNumber>
</Package>
<Package>
<PackageFolder>Package-D</PackageFolder>
<PackageNumber>02</PackageNumber>
</Package>
</Sequence>
</Sequences>
"@
Clear-Host
$Packages = ( $Xml.Sequences.Sequence | Sort-Object SeqenceNumber | Select-Object -First 1 ).Package
foreach ( $Package in $Packages ) {
IF ( -not $Package.PackageProcessed ) { $Package.AppendChild( $Xml.CreateElement( "PackageProcessed" ) ) | Out-Null }
$Package.PackageProcessed = "True"
}
推荐阅读
- python - 如何从python中的字符串中只获取单词?
- java - 单个测试执行问题期间的多个弹簧上下文
- python - 使用 Tkinter() 的 BMI 计算器程序
- flutter - 状态变量未按预期返回值 Flutter
- python - Cv2 findChessboardCorners 找不到角点
- python - 结果:失败异常:OSError:[Errno 19] No such device: '/home/site/wwwroot' in Python Azure Function
- python - 如何以图像格式保存CNN模型的预测结果?
- bash - 如何使用shell脚本获得所有奇数的乘积直到n
- python - 编辑 Pandas 表 - 从列到行
- oracle - EntityFrameworkCore 查询数据时抛出 NullReferenceException