在powershell中对xml文档进行排序

Hen*_*nno 4 xml powershell

我想使用powershell对以下xml文档进行排序.

<car>
<germany>
    <manufacturer>Opel</manufacturer>
    <manufacturer>BMW</manufacturer>
    <manufacturer>Benz</manufacturer>
</germany>
<japan>
    <manufacturer>Nissan</manufacturer>
    <manufacturer>Daihatsu</manufacturer>
</japan></car>
Run Code Online (Sandbox Code Playgroud)

因此,应该对德国和日本内部的元素进行排序.

理想情况下,我想从文件系统中读取xml,并使用已排序的文档覆盖现有文档.

ste*_*tej 5

可能有很多解决方案.一个很快就是这个:

$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>
"@
Run Code Online (Sandbox Code Playgroud)

请注意,我曾经Select-Xml从xml中提取制造商,因为$xml.car.germany.manufacturer只返回了字符串数组(你可能遇到了问题).即使在PsBase财产的帮助下,我也无法得到原始物体.这就是我使用的原因Select-Xml.