gpt4 book ai didi

xml - 如何在 Powershell 中迭代 Xml.XmlElement 的不规则命名的子项?

转载 作者:数据小太阳 更新时间:2023-10-29 02:48:46 25 4
gpt4 key购买 nike

我有一个以下格式的 XML 文件:

<xml>
<data>
<foo float="99.0"/>
<bar float="12.0"/>
<tribble bool="true"/>
...
<flibble int="1"/>
</data>
</xml>

如果我在 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 ...
...

而且我可以单独访问每个子元素。但是我如何遍历所有子项,用管道处理它们呢?我很想能够写出这样的东西:

> $xmlData.data.Children | ?{$_ -eq "foo"}

...但是,唉,这只是一厢情愿的想法。

编辑:好的,所以我可以像这样反射(reflection)这些属性:

> $xmlData.data | get-member -memberType Property | ?{$_.Name -eq "foo"}

但是我无法从属性(上面我正在对 MemberDefinition 进行操作)转到实际的子元素。或者我可以吗?

最佳答案

首先:您需要使用Get-Member -Force ... 它将向您展示一切。请特别注意 get_* 方法,这些方法表示由于某种原因未作为 PowerShell 中的属性公开的属性。所以当你看到 get_ChildNodes在成员列表中,这意味着对象上有一个 .ChildNodes 属性(即使 PowerShell 出于某种原因隐藏了它)。

第二: 因此,有很多方法,包括您暗示的 get-member 方法(我附加了 Format-Table 因为它可以更容易地告诉您您得到了一些东西):

  1. $xmlData.data.SelectNodes("*") | ft name, OuterXml
  2. $xmlData.data.ChildNodes | ft name, OuterXml
  3. $xmlData.data | gm -type Property | % { $xmlData.data.($_.Name) } |<br/>
    Where { $_ -is [Xml.XmlElement] } | ft Name, OuterXml

关于xml - 如何在 Powershell 中迭代 Xml.XmlElement 的不规则命名的子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3389541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com