2010-12-14 5 views
0

数値データと別のタグに格納された文字列データを含むXMLファイルのソート方法を教えてもらえますか?たとえば、私はCharges(数値)とNetwork(文字列)要素を持っています。今、私はJavascriptのChargesに基づいてXMLファイルをソートしたいと思っています。JavaScriptを数値データの基にXMLを並べ替える

どのような簡単な例ですか?

<Results> 
     <network>Wateen</network> 
     <speed>2048</speed> 
     <type>Fixed</type> 
     <install_charges>500</install_charges> 
     <charges>20</charges> 
    </Results> 

    <Results> 
     <network>PTCL</network> 
     <speed>4096</speed> 
     <type>Fixed</type> 
     <install_charges>0</install_charges> 
     <charges>2000</charges> 
    </Results> 

    <Results> 
     <network>PTCL</network> 
     <speed>4096</speed> 
     <type>Fixed</type> 
     <install_charges>0</install_charges> 
     <charges>200</charges> 
    </Results> 

    <Results> 
     <network>PTCL</network> 
     <speed>4096</speed> 
     <type>Fixed</type> 
     <install_charges>0</install_charges> 
     <charges>3000</charges> 
    </Results> 

にはどうすればchargesに応じて上記のXMLを並べ替えるのですか? XSLは多くの問題を抱えているので、非XSLメソッドであればいいでしょう。

+1

あなたは例のXML文字列を投稿してもらえますか? –

答えて

0

あなたは結果要素を含む配列を作成し、配列のネイティブソート方法を使用することができXSLを使用することを好まない場合は、次の

<Results> 
     <network>Wateen</network> 
     <speed>2048</speed> 
     <type>Fixed</type> 
     <install_charges>500</install_charges> 
     <charges>20</charges> 
    </Results> 

    <Results> 
     <network>PTCL</network> 
     <speed>4096</speed> 
     <type>Fixed</type> 
     <install_charges>0</install_charges> 
     <charges>2000</charges> 
    </Results> 

    <Results> 
     <network>PTCL</network> 
     <speed>4096</speed> 
     <type>Fixed</type> 
     <install_charges>0</install_charges> 
     <charges>200</charges> 
    </Results> 

    <Results> 
     <network>PTCL</network> 
     <speed>4096</speed> 
     <type>Fixed</type> 
     <install_charges>0</install_charges> 
     <charges>3000</charges> 
    </Results> 
<script> 

var nodeArray=[]; 
var nodeList=document.getElementsByTagName('Results') 

//fill array 
for(var i=0;i<nodeList.length;++i) 
{ 
    nodeArray.push(nodeList[i]); 
} 

//sort array 
nodeArray.sort(function(a,b) 
       { 
       return (
         Number(a.getElementsByTagName('charges')[0].firstChild.data) 
          - 
         Number(b.getElementsByTagName('charges')[0].firstChild.data) 
         ); 
       }); 

//reorder nodes 
for(var i=nodeArray.length-1;i>=0;i--) 
{ 
    nodeArray[i] 
    .parentNode 
    .insertBefore(nodeArray[i], 
        nodeArray[i].parentNode.getElementsByTagName('Results')[0]); 
} 
</script>