Powershell:按子节点值按元素排序xml

时间:2014-07-14 21:22:44

标签: xml powershell

如何对这个"元组"列表中的第二个节点对此xml进行排序。 ("整数"键入)使用Powershell。

所以结果是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>

1 个答案:

答案 0 :(得分:3)

试试这个:

$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')

诀窍是获取每个排序的节点(除了最后一个)并在新的(后排序)最后一个节点之前插入它。