Как преобразовать список в XML в Powershell? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть разные xml-файлы, из которых я должен объединить все разные «item» -узлы в новый xml-файл.

Мне удалось получить узлы и извлечь их в список, но теперь у меня возникают трудности с преобразованием этого списка в XML-файл.

Я пытался преобразовать список в xml-файл, используя ust convertTo-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 голосов
/ 14 июня 2019

Это все о том, как out-file работает с переменными XML.Чтобы понять это, вам нужно протестировать его на простой переменной. Допустим, у нас есть переменная

$x="This an XML variable"

.сначала мы выведем эту переменную, используя out-file, например

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

без преобразования ее в XML.Конечно, когда он открывается как XML-файл, он будет пустым, но при редактировании с помощью блокнота будет отображаться введенная нами строка.после этого мы конвертируем в XML, а затем выводим его, как вы делали это в своем коде.

$xXML=$x|convertto-XML

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

Как и раньше, файл XML будет пустым, но при редактировании файла test2.xml он будет содержать что-токак это:

xml Объекты

--- -------

version = "1.0" encoding = "utf-8" Objects

и этот же результат вы увидите, если наберете $xXML в командной строке.Таким образом, выходной файл просто выводит результаты, которые проходят через конвейер.если вы хотите увидеть представление XML, вам нужно набрать $xXML.innerxml, я предпочитаю сохранять любые данные XML в файл, используя один из этих методов.

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

ИЛИ

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

Поэтому вместо последней строки в вашем коде вы можете просто набрать

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...