我正在处理XML内容(下面),想要迭代Student元素的值和Gender的相应值,然后最后检查学生姓名是否为Anne,将Gender打印为女性。
但是当我尝试使用下面的脚本时,我得到的输出是 -
Anne is Male
Anne is Male
Anne is Female
这可能是什么问题?我可以在这里得到一些帮助吗?
XML内容:
?xml version="1.0"?>
<Objects>
<Object Type="System.Management.Automation.CustomObject">
<Property Name="Gender" Type="Application.String">Male</Property>
<Property Name="Student" Type="Microsoft.Application.Service">John</Property>
</Object>
<Object Type="System.Management.Automation.CustomObject">
<Property Name="Gender" Type="Application.String">Male</Property>
<Property Name="Student" Type="Microsoft.Application.Service">Charles</Property>
</Object>
<Object Type="System.Management.Automation.CustomObject">
<Property Name="Gender" Type="Application.String">Female</Property>
<Property Name="Student" Type="Microsoft.Application.Service">Anne</Property>
</Object>
</Objects>
这是脚本:
[xml]$file = Get-Content C:\xml-report.xml
foreach ($obj in $file.Objects.Object.Property) {
if('Student'-contains $obj.Name) {
$name = $obj.'#text'
}
if('Gender' -contains $obj.Name) {
$gend = $obj.'#text'
}
if ($name = "Anne") {
Write-Host $name "is" $gend
}
}
答案 0 :(得分:4)
您需要开始迭代对象而不是对象的属性,然后从对象的每个属性中选择相关数据。
您还需要使用正确的语法来测试相等性,在Powershell中它是-eq
。有关详情,请输入Get-Help about_comparison_operators
尝试:
foreach ($obj in $file.Objects.Object) {
$gend = $obj.Property | ? { $_.Name -eq 'Gender' } | Select -expand '#text'
$name = $obj.Property | ? { $_.Name -eq 'Student' } | Select -expand '#text'
if ($name -eq 'Anne') {
Write-Output "$name is $gend"
}
}
?
是Where-Object
的别名,允许您根据其属性过滤集合。