2014-07-14 99 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') 

訣竅是把每個排序節點(除了最後一個)並將其插入新的(排序後)最後一個節點之前。

相關問題