Powershell:按子节点值的元素对xml进行排序

Pat*_*k P 3 xml powershell

如何使用 Powershell 按“元组”列表(键入的“整数”)的第二个节点对该 xml 进行降序排序。

因此结果将是 xml,但第一个元素将是 COMPUTERSF34,然后是 COMPUTER123..

   <Result>
                <Tuple>
                    <Answer type="string">COMPUTERSF34</Answer>
                    <Answer type="integer">93</Answer>
                </Tuple>
                <Tuple>
                    <Answer type="string">NYCCOMPUTER01</Answer>
                    <Answer type="integer">44</Answer>
                </Tuple>
                <Tuple>
                    <Answer type="string">COMPUTER_05</Answer>
                    <Answer type="integer">45</Answer>
                </Tuple>
                <Tuple>
                    <Answer type="string">COMPUTER56</Answer>
                    <Answer type="integer">38</Answer>
                </Tuple>
                <Tuple>
                    <Answer type="string">COMPUTER123</Answer>
                    <Answer type="integer">51</Answer>
                </Tuple>
    ...
    </Result>
Run Code Online (Sandbox Code Playgroud)

Kei*_*ill 5

尝试这个:

$xml = [xml]@'
   <Result>
                <Tuple>
                    <Answer type="string">COMPUTERSF34</Answer>
                    <Answer type="integer">93</Answer>
                </Tuple>
                <Tuple>
                    <Answer type="string">NYCCOMPUTER01</Answer>
                    <Answer type="integer">44</Answer>
                </Tuple>
                <Tuple>
                    <Answer type="string">COMPUTER_05</Answer>
                    <Answer type="integer">45</Answer>
                </Tuple>
                <Tuple>
                    <Answer type="string">COMPUTER56</Answer>
                    <Answer type="integer">38</Answer>
                </Tuple>
                <Tuple>
                    <Answer type="string">COMPUTER123</Answer>
                    <Answer type="integer">51</Answer>
                </Tuple>
    </Result>
'@
$sorted = $xml.Result.Tuple | sort {[int]$_.Answer[1].'#text'} -desc
$lastChild = $sorted[-1]
$sorted[0..($sorted.Length-2)] | Foreach {$xml.Result.InsertBefore($_,$lastChild)}
$xml.Save('c:\foo.xml')
Run Code Online (Sandbox Code Playgroud)

技巧是获取每个已排序的节点(最后一个除外)并将其插入到新的(排序后)最后一个节点之前。