使用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

我试图使用PowerShell循环遍历XML,但无法获取
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
}
}