使用powershell解析xml
我对powershell是新手。我有一个配置XML,它的内容如下-使用powershell解析xml,powershell,Powershell,我对powershell是新手。我有一个配置XML,它的内容如下- <xml> <Section name="BackendStatus"> <BEName BE="crust" Status="1" /> <BEName BE="pizza" Status="1" /> <BEName BE="pie" Status="1" /> <BEName BE="b
<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>
我需要解析BEName
中的每个元素以检查状态。如何使用PowerShell实现这一点?[xml]$xmlfile=''
[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
}
}
foreach($xmlfile.xml.Section.bename中的bename){
if($bename.Status-等式1){
#做点什么
}
}
第一步是使用powershell的
将字符串强制转换为[xml]的独特功能
$doc=[xml]@'
'@
Powershell使使用点符号解析xml变得非常容易。这
语句将为BEName元素生成一系列XmlElements:
$doc.xml.Section.BEName
然后,您可以将这些对象导入where-object cmdlet以过滤
结果。你能用吗?作为通往何处的捷径
$doc.xml.Section.BEName |?{$\状态-等式1}
大括号内的表达式将针对
管道,并且只有状态为1的才会返回。$_
运算符引用管道中的当前对象(XmlElement)
如果需要对管道中的每个对象执行某些操作,可以对
对象导入foreach object cmdlet,该cmdlet为每个对象执行一个块
正在筹备中是foreach的快捷方式:
$doc.xml.Section.BEName |?{$\.Status-eq 1}{$\.BE+“很好吃”}
Powershell在这方面做得很好。这真的很容易组装的管道
对象、筛选管道,并对管道中的每个对象执行操作。如果要从文件开始,可以执行此操作
[xml]$cn=Get Content config.xml
$cn.xml.Section.BEName
请注意,通过点遍历获取标记将为不包含子标记的任何父标记返回空对象。例如,对于上述示例,
$doc.xml.Section.BEName.BEChild.Length
将为7
,尽管没有定义BEChild标记。如果您正在筛选,这不会成为问题,但如果您通过ForEach对象
或类似方式进行迭代,则需要安全地跳过这些空对象。链接已断开:-(