我在文件“ Test1.xml”中具有以下XML数据:
<TextValuess>
<TextValues Name="Value1" Override="true" Type="String">
<DEV>Source=DEV;Catalog=DEV_DMT;Integrated Security=SSPI;</DEV>
<INT10>Source=LAB;Catalog=TST_INT10;Integrated Security=SSPI;</INT10>
<INT>Source=LAB1;Catalog=TST_INT1;Integrated Security=SSPI;</INT>
<INT2>Source=LAB10;Catalog=TST_INT12;Integrated Security=SSPI;</INT2>
</TextValues>
<TextValues Name="ENVIRONMENT" Override="true" Type="String">
<DEV>DEV</DEV>
<INT10>INT10</INT10>
<INT>INT1</INT>
<INT2>INT15</INT2>
</TextValues>
</TextValuess>
我想遍历所有属性,并通过PowerShell传递需要检索的参数来检索数据。
例如:如果我将Variable值作为INT10传递,则仅需要以下值:
Name Value ---- ----- Value1 LAB Environment INT10
我能够使用下面的PowerShell命令检索元素值之一。
[xml]$XmlDocument = Get-Content D:\Roshan\Test1.xml
$XmlDocument.TextValuess.TextValues[0].INT10
$XmlDocument.TextValuess.TextValues[1].INT10
但是,基于文件,XML标记可能每次都会增加或减少。我需要遍历现有数据并获取结果。
我不确定如何使用foreach
来读取文件中的所有值。
答案 0 :(得分:2)
您可以简单地将TextValues
传递到Select-Object
并指定需要以下值的属性名称:
[xml]$XmlDocument = Get-Content D:\Roshan\Test1.xml
$XmlDocument.TextValuess.TextValues | Select-Object Name, INT10
答案 1 :(得分:0)
从XML结构中选择数据的最通用方法是XPath。在您的情况下,您将执行以下操作:
$child = 'INT10'
$XmlDocument.SelectNodes("//TextValues[./${child}]") | ForEach-Object {
New-Object -Type PSObject -Property @{
'Name' = $_.Name
'Value' = $_.$child
}
} | Select-Object Name, Value
如果要从子节点中提取部分信息,则需要指定操作方式。例如:
($_.$child -split ';')[0] -replace '^Source='