2014-07-14 90 views
3

如何使用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> 
+0

为什么?数据文件不需要进行排序,这是应用程序在读取数据时应该执行的操作。 AFAIK您需要按单词进行分组(修剪数字),然后按数字对组成员进行排序(修剪单词并将其转换为int)并按字母顺序排序组。 –

回答

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

诀窍是把每个排序节点(除了最后一个)并将其插入新的(排序后)最后一个节点之前。

相关问题