分配是将以下xml代码读回Powershell并仅显示具有属性的项目:event =“1”。
xml file created by Powershell script createsim.ps1
<?xml version="1.0" encoding="utf-8"?>
<simulation name="Protocal Simulation">
<duration type="clock">100000</duration>
<density>1.1</density>
<ideal_degree>12</ideal_degree>
<radius>86</radius>
<supportedchannels>[1,4,7,9,11,13]</supportedchannels>
<class>Field.RandomField</class>
<width>1000</width>
<height>1000</height>
<description event="1">Re-form the network</description>
<action event="1">densityChangeDetected()</action>
<description event="2">End the simulation</description>
<action event="2">end()</action>
</simulation>"
管道输出脚本和导出对象。
PS C:\scripts> C:\scripts\createsim.ps1 | Export-Clixml C:\scripts\simtemp.xml
导入对象。
PS C:\scripts> $simxml = Import-Clixml C:\scripts\simtemp.xml
寻找事件属性。
PS C:\scripts> $xmlout = $simxml | Where-Object ($_.event -eq 1) | Sort-Object event
PS C:\scripts> $xmlout
PS C:\scripts> write-host $xmlout
没有错误消息,也没有打印出来。
我将不胜感激任何帮助或提示。我在Windows 8.1上使用Powershell 4.0
答案 0 :(得分:1)
我不确定为什么Export-Clixml
是必要的。如果createsim.ps1
生成XML,则可以直接使用该XML而无需导出和导入。然后你的工作变得容易多了。假设您的脚本生成了帖子中记录的XML,则此代码为:
> $xml = [XML](Get-Content C:\scripts\createsim.ps1)
> foreach ($node in $xml.simulation.ChildNodes)
{
if ($node.event -eq 1) { $node.OuterXml }
}
给你:
<description event="1">Re-form the network</description>
<action event="1">densityChangeDetected()</action>
答案 1 :(得分:0)
您可以使用以下方法尝试@djs解决方案:
$xml = [XML](Get-Content(C:\scripts\createsim.ps1))
你可以选择-Xml CmdLet试试:
Select-Xml -Path "C:\temp\test.xml" -XPath "/simulation/action[@event]" | % {$_.node}
或
Select-Xml -Path "C:\temp\test.xml" -XPath "/simulation/action" | where {$_.node.event -eq '1'} | % {$_.Node.OuterXml}
与@djs相同的结果:
Select-Xml -Path "C:\temp\test.xml" -XPath "/simulation/*[@event]" | where {$_.node.event -eq '1'} | % {$_.Node.OuterXml}