将字典转换为正确格式的xml?

问题描述 投票:0回答:1

以下脚本

$d = New-Object -TypeName 'System.Collections.Generic.Dictionary[int, bool]'
$d.Add(1, $true)
$d.Add(2, $false)
($d | ConvertTo-Xml).DocumentElement.OuterXml

退货

<Objects>
  <Object Type="System.Collections.Generic.Dictionary`2[System.Int32,System.Boolean]">
    <Property Name="Key" Type="System.Int32">1</Property>
    <Property Name="Value" Type="System.Boolean">True</Property>
    <Property Name="Key" Type="System.Int32">2</Property>
    <Property Name="Value" Type="System.Boolean">False</Property>
  </Object>
</Objects>

但是,它能返回以下内容吗?

<Objects>
  <Object Key="1" Value="True" />
  <Object Key="2" Value="False" />
</Objects>
xml powershell
1个回答
2
投票

使用

ConvertTo-Xml
(宽松地说,内存中与
Export-CliXml
相对应,尽管具有不同的输出格式),所需格式的最接近的近似需要添加
-NoTypeInformation
开关,这给你相当于:

<Objects>
  <Object>
    <Property Name="Key">1</Property>
    <Property Name="Value">True</Property>
    <Property Name="Key">2</Property>
    <Property Name="Value">False</Property>
  </Object>
</Objects>

注:

  • 一般来说,
    ConvertTo-Xml
    实际上是无用的,因为生成的 XML 格式既没有记录,也没有补充的 cmdlet 来解释(反序列化)它。
  • PowerShell(核心)7,在 v7.5+ 中现在提供
    ConvertTo-CliXml
    ConvertFrom-CliXml
    cmdlet,它们使用基于标准化 XML 的格式 CLIXML ,PowerShell 使用该格式进行跨进程序列化,例如在远程处理中。

要获得所需的输出,您必须手动创建 XML :

$d.GetEnumerator() | ForEach-Object { '<Objects>' } {
    '  <Object Key="{0}" Value="{1}" />' -f $_.Key, $_.Value
  } { '</Objects>'}

注意需要使用

.GetEnumerator()
才能通过管道单独发送键值对;默认情况下,PowerShell 不会枚举管道中的哈希表/字典条目。

© www.soinside.com 2019 - 2024. All rights reserved.