如何在Powershell中将列表转换为xml?

时间:2019-06-14 13:28:20

标签: xml powershell

我有不同的xml文件,必须将所有不同的“ item” -nodes合并到一个新的xml文件中。

我已经能够获取节点并将其提取到列表中,但是现在我很难将列表转换为xml文件。

我尝试使用usint convertTo-XML将列表转换为xml文件,但是由于某种原因,xml文件中没有任何项目。我已经检查了列表,并且确实有项目。

$OutComId = @()
Get-ChildItem $rootFolder\$country\$projectsToCheck\$mmyyyy | ForEach-Object {
    [xml]$xml = Get-Content -Encoding UTF8 $rootFolder\$country\$projectsToCheck\$mmyyyy\$_
    $nodes = $xml.SelectNodes("//Costs")

    foreach($node in $nodes) {
        $OutComId += $node.Item
    } 
}
$exportPath = "$rootFolder\$country\$projectsToCheck\$mmyyyy"
$OutComId | ConvertTo-XML |  Out-File "$exportPath\combined.xml"

我得到一个空的xml-文件

1 个答案:

答案 0 :(得分:0)

这与out-file如何处理XML变量有关。要了解这一点,您需要在一个简单的变量上进行测试,可以说我们有一个变量

  

$x="This an XML variable"

。首先,我们将使用out-file这样的变量

  

$x|out-file -path C:\test.xml

不将其转换为XML。当然,将其作为XML文件打开时将为空,但使用记事本进行编辑时将显示我们输入的字符串。之后,我们将转换为XML,然后像在代码中一样将其转换为XML。

  

$xXML=$x|convertto-XML

     

$xXML|out-file C:\test2.xml

与以前一样,XML文件将为空,但是在编辑文件test2.xml时,它将包含以下内容:

  

xml对象

     

--- -------

     

版本=“ 1.0”编码=“ utf-8”对象

,如果您在外壳程序中键入$xXML,也会得到相同的结果。因此,文件外出只是通过管道的结果。如果要查看XML表示形式,则需要键入$xXML.innerxml,我更喜欢使用以下方法之一将任何XML数据保存到文件中。

  

$xXML.save("C:\test3.xml")

OR

  

$x |Export.CliXML -path "C:\test4.xml"

因此,您只需输入

即可代替代码的最后一行
  

$OutComId | Export-CliXML "$exportPath\combined.xml"