使用PowerShell在XML中循环
我试图使用PowerShell循环遍历XML,但无法获取使用PowerShell在XML中循环,xml,powershell,Xml,Powershell,我试图使用PowerShell循环遍历XML,但无法获取InnerXML详细信息 XML: 怀特菲尔德 560100 班加罗尔 印度 班加罗伊斯特 古尔冈 601000 新德里 印度 新德里西部 脚本: [string]$FilePath='C:\Users\Sujeet\Desktop\UserData.xml' 试一试{ [xml]$XMLInput=获取内容-路径$FilePath }抓住{ 写入主机“无法读取或分析XML文件。” 出口 } if((选择Xml-Xml$XMLInput
InnerXML
详细信息
XML:
怀特菲尔德
560100
班加罗尔
印度
班加罗伊斯特
古尔冈
601000
新德里
印度
新德里西部
脚本:
[string]$FilePath='C:\Users\Sujeet\Desktop\UserData.xml'
试一试{
[xml]$XMLInput=获取内容-路径$FilePath
}抓住{
写入主机“无法读取或分析XML文件。”
出口
}
if((选择Xml-Xml$XMLInput-XPath”//address“| measure).Count-gt 0){
选择Xml-Xml$XMLInput-XPath“//address”| foreach{
$\ Node.InnerXML
}
}
如何获取
,
,
的值
此外,我只想在城市为“班加罗尔”时获取详细信息。
InnerXml
以字符串形式提供XML节点的内容。如果要访问嵌套元素,请不要使用它<代码>$\节点是一个对象。该对象的子节点可以按如下方式访问:
选择Xml-Xml$XMLInput-XPath'//address'| ForEach对象{
$street=$\ Node.street
$city=$\u.Node.city
...
}
使用点访问自动扩展节点的值
要将结果限制在特定城市,请在XPath表达式中添加筛选器:
$city='Bangalore'
选择Xml-Xml$XMLInput-XPath”//address[city='${city}']“| ForEach对象{
$street=$\ Node.street
$city=$\u.Node.city
...
}
或者,您可以使用SelectNodes()
方法代替selectxml
:
$city='Bangalore'
$XMLInput.SelectNodes(“//地址[city='${city}']”)ForEach对象{
$street=$\ street
$city=$\城市
...
}
这里有另一种方法:
[xml]$xml = "<script>
<data>
<address>
<street>WhiteField</street>
<zip>560100</zip>
<city>Bangalore</city>
<country>India</country>
<postofficebox>BangaloreEast</postofficebox>
</address>
</data>
<data>
<address>
<street>Gurgaon</street>
<zip>601000</zip>
<city>New Delhi</city>
<country>India</country>
<postofficebox>New Delhi West</postofficebox>
</address>
</data>
</script>"
$addresses = $xml.script.data | Select-Object -ExpandProperty address
foreach ($address in $addresses) {
if($address.city -eq 'Bangalore') {
$address.street
}
}
[xml]$xml=”
怀特菲尔德
560100
班加罗尔
印度
班加罗伊斯特
古尔冈
601000
新德里
印度
新德里西部
"
$addresses=$xml.script.data |选择对象-扩展属性地址
foreach($地址中的地址){
如果($address.city-eq‘班加罗尔’){
$address.street
}
}