我是PowerShell的新手.我有一个配置XML,读作为 -
<xml>
<Section name="BackendStatus">
<BEName BE="crust" Status="1" />
<BEName BE="pizza" Status="1" />
<BEName BE="pie" Status="1" />
<BEName BE="bread" Status="1" />
<BEName BE="Kulcha" Status="1" />
<BEName BE="kulfi" Status="1" />
<BEName BE="cheese" Status="1" />
</Section>
</xml>
Run Code Online (Sandbox Code Playgroud)
我需要解析每个元素BEName
以检查状态.如何使用PowerShell完成此操作?
Mar*_*eld 57
第一步是将xml字符串加载到XmlDocument中,使用powershell将字符串强制转换为[xml]的独特功能
$doc = [xml]@'
<xml>
<Section name="BackendStatus">
<BEName BE="crust" Status="1" />
<BEName BE="pizza" Status="1" />
<BEName BE="pie" Status="1" />
<BEName BE="bread" Status="1" />
<BEName BE="Kulcha" Status="1" />
<BEName BE="kulfi" Status="1" />
<BEName BE="cheese" Status="1" />
</Section>
</xml>
'@
Run Code Online (Sandbox Code Playgroud)
Powershell使用点表示法很容易解析xml.该语句将为您的BEName元素生成一系列XmlElements:
$doc.xml.Section.BEName
Run Code Online (Sandbox Code Playgroud)
然后,您可以将这些对象传递到where-object cmdlet以过滤结果.您可以使用 ?作为哪里的捷径
$doc.xml.Section.BEName | ? { $_.Status -eq 1 }
Run Code Online (Sandbox Code Playgroud)
将为管道中的每个XmlElement计算大括号内的表达式,并且仅返回状态为1的那些表达式.$ _运算符引用管道中的当前对象(XmlElement).
如果需要为管道中的每个对象执行某些操作,可以将对象传递到foreach-object cmdlet,该cmdlet为管道中的每个对象执行一个块.%是foreach的快捷方式:
$doc.xml.Section.BEName | ? { $_.Status -eq 1 } | % { $_.BE + " is delicious" }
Run Code Online (Sandbox Code Playgroud)
Powershell非常擅长这些东西.组装对象的管道,过滤管道以及对管道中的每个对象执行操作非常容易.
小智 20
如果你想从一个文件开始,你可以这样做
[xml]$cn = Get-Content config.xml
$cn.xml.Section.BEName
Run Code Online (Sandbox Code Playgroud)
Wad*_*e73 11
[xml]$xmlfile = '<xml> <Section name="BackendStatus"> <BEName BE="crust" Status="1" /> <BEName BE="pizza" Status="1" /> <BEName BE="pie" Status="1" /> <BEName BE="bread" Status="1" /> <BEName BE="Kulcha" Status="1" /> <BEName BE="kulfi" Status="1" /> <BEName BE="cheese" Status="1" /> </Section> </xml>'
foreach ($bename in $xmlfile.xml.Section.BEName) {
if($bename.Status -eq 1){
#Do something
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80165 次 |
最近记录: |