Сортировка XML-документа в PowerShell - PullRequest
4 голосов
/ 20 октября 2010

Я хочу отсортировать следующий XML-документ с помощью powershell.

<car>
<germany>
    <manufacturer>Opel</manufacturer>
    <manufacturer>BMW</manufacturer>
    <manufacturer>Benz</manufacturer>
</germany>
<japan>
    <manufacturer>Nissan</manufacturer>
    <manufacturer>Daihatsu</manufacturer>
</japan></car>

Так что элементы внутри Германии и Японии должны быть отсортированы.

В идеале я хотел бы прочитать xml из файловой системы и перезаписать существующий документ отсортированным.

1 Ответ

5 голосов
/ 20 октября 2010

Вероятно, есть много решений.Вот один из быстрых:

$xml = [xml]"<car>
<germany>
    <manufacturer>Opel</manufacturer>
    <manufacturer>BMW</manufacturer>
    <manufacturer>Benz</manufacturer>
    <manufacturer>b</manufacturer>
    <manufacturer>a</manufacturer>
    <manufacturer>c</manufacturer>
</germany>
<japan>
    <manufacturer>Nissan</manufacturer>
    <manufacturer>Daihatsu</manufacturer>
</japan></car>"

$g = $xml.car.germany| select-xml 'manufacturer' | Select-Object -expand Node | sort '#text'
$j = $xml.car.japan | select-xml 'manufacturer' | Select-Object -expand Node | sort '#text'

@"
<car>
<germany>
    $( ($g | % { $_.OuterXml}) -join "`n`t" )
</germany>
<japan>
    $( ($j | % { $_.OuterXml}) -join "`n`t" )
</japan></car>
"@

Обратите внимание, что я использовал Select-Xml для извлечения производителей из XML, потому что $xml.car.germany.manufacturer вернул только массив строк (у вас, вероятно, были проблемы с этим).Я не смог получить оригинальный объект, даже с помощью свойства PsBase.Вот почему я использовал Select-Xml.

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