ten*_*npn 2 xml powershell powershell-2.0
我有一个格式如下的XML文件:
<xml>
<data>
<foo float="99.0"/>
<bar float="12.0"/>
<tribble bool="true"/>
...
<flibble int="1"/>
</data>
</xml>
Run Code Online (Sandbox Code Playgroud)
如果我在Powershell中获取该数据,我可以使用Get-Memeber查看数据的所有子元素:
> $xmlData = [xml](Get-Content myfile.xml)
> $xmlData.data | Get-Member
...
foo Property System.Xml.XmlElement ...
bar Property System.Xml.XmlElement ...
tribble Property System.Xml.XmlElement ...
...
Run Code Online (Sandbox Code Playgroud)
我可以单独访问每个子元素.但是,我如何迭代所有的孩子,用管道处理它们?我希望能够写出这样的东西:
> $xmlData.data.Children | ?{$_ -eq "foo"}
Run Code Online (Sandbox Code Playgroud)
......但唉,这只是一厢情愿的想法.
编辑:好的,我可以反思这样的属性:
> $xmlData.data | get-member -memberType Property | ?{$_.Name -eq "foo"}
Run Code Online (Sandbox Code Playgroud)
但是我不能从属性(我正在运行一个MemberDefinition)到实际的子元素.或者我可以吗?
第一:你需要使用Get-Member -Force......它会向你展示一切.请特别关注get_*方法,这些方法表示由于某种原因未在PowerShell中作为属性公开的属性.因此,当您get_ChildNodes在成员列表中看到时,表示该对象上存在.ChildNodes属性(即使PowerShell由于某种原因隐藏了它).
第二:因此,有很多方法,包括你暗示的get-member方法(我追加,Format-Table因为它更容易告诉你有什么东西):
$xmlData.data.SelectNodes("*") | ft name, OuterXml$xmlData.data.ChildNodes | ft name, OuterXml$xmlData.data | gm -type Property | % { $xmlData.data.($_.Name) } |
Where { $_ -is [Xml.XmlElement] } | ft Name, OuterXml| 归档时间: |
|
| 查看次数: |
11395 次 |
| 最近记录: |