【问题标题】:Force a System.Array when reading a XML file with only one element in PowerShell在 PowerShell 中读取只有一个元素的 XML 文件时强制使用 System.Array
【发布时间】:2017-10-11 15:24:54
【问题描述】:

所以问题是,如果我有一个只有一个元素的 XML 文件,我无法访问它,就像它是维数为 1 的数组一样。因为 PowerShell 将其读取为 System.Xml.XmlLinkedNode 而不是 System.Array .

如何强制将其读取为包含 1 个项目的数组?

读取此 XML 文件:

<batch>
  <project name="test">
    <locPrj>locPrj</locPrj>
    <locFolder>locFolder</locFolder>
    <plan name="Plan 01" exec="1" />
  </project>
</batch>

不允许我称它为:

[xml]$mainXML = Get-Content -Path "C:\test.xml"
$mainXML.batch.project[0] # This returns nothing!
$mainXML.batch.project.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                          
-------- -------- ----                                     --------                                                                                          
True     False    XmlElement                               System.Xml.XmlLinkedNode    

但是这个 XML,它允许我:

<batch>
  <project name="test">
    <locPrj>locPrj</locPrj>
    <locFolder>locFolder</locFolder>
    <plan name="Plan 01" exec="1" />
  </project>
  <project name="test2">
    <locPrj>locPrj2</locPrj>
    <locFolder>locFolder2</locFolder>
    <plan name="Plan 01" exec="0" />
  </project>
</batch>

我一直在寻找一个命令来强制为该节点创建一个数组,但我没有找到任何人。有什么想法吗?

[xml]$mainXML = Get-Content -Path "C:\test2.xml"
$mainXML.batch.project[0] # This the first project called test
$mainXML.batch.project.GetType()
IsPublic IsSerial Name                                     BaseType                                                                                          
-------- -------- ----                                     --------                                                                                          
True     True     Object[]                                 System.Array 

【问题讨论】:

    标签: arrays xml powershell


    【解决方案1】:

    只需使用@() 将节点投射到一个数组

    @($mainXML.batch.project)[0]
    

    【讨论】:

    • 问题是我在每个“项目”中都有一个 for 循环并修改它们的元素。就像在 $mainXML.batch.project[$nInt] 中有一个虚拟变量 $nInt,使用这个解决方案我只需将它引入一个数组,但是当我有多个项目时,我会在一个数组内有一个数组。
    猜你喜欢
    • 2016-12-05
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多