使用PowerShell解析XML文件

Sit*_*thi 7 .net powershell powershell-2.0

我的一个应用程序是生成以下XML文件.

<root>
    <command name="Set">
        <property name="PWR.WakeupOnLAN" value="6" errorcode="0x0"/>
    </command>
    <command name="Set">
    </command>
    <command name="biossettings">
        <property name="task" value="Succeeded." errorcode="0x0"/>
    </command>
</root>
Run Code Online (Sandbox Code Playgroud)

我有兴趣阅读"PWR.WakeupOnLAN"属性名称的值和错误代码.在发布之前,我尝试了各种各样的东西,但在PowerShell中找不到正确的代码来读取属性.任何人都可以帮助我使用PowerShell代码吗?

Enr*_*lio 12

在PowerShell 2.0中,您可以使用新的Select-Xml cmdlet和XPath表达式解决此问题:

[xml]$document = "<root><command name='Set'><property name='PWR.WakeupOnLAN' value='6' errorcode='0x0'/></command><command name='Set'></command><command name='biossettings'><property name='task' value='Succeeded.' errorcode='0x0'/></command>"

$value = (Select-Xml -Xpath "//property[@name='PWR.WakeupOnLAN']/@value" $document).Node.Value
$errorCode = (Select-Xml -Xpath "//property[@name='PWR.WakeupOnLAN']/@errorcode" $document).Node.Value
Run Code Online (Sandbox Code Playgroud)

相关资源:


JPB*_*anc 8

@Enrico Campidoglio给出了"最干净"的解决方案,这是一种古老的时尚.

PS> $xml = [XML](get-content c:\temp\yourfile.xml)
PS> $errcode = ($xml.root.command | where {$_.property.name -eq "PWR.WakeupOnLAN" }).property.errorcode
Run Code Online (Sandbox Code Playgroud)