2013-06-18 24 views
-1

我想分析一個xml文件,並以不同於它們出現在xml中的順序列出這些元素。每個子元素都有一個名稱和一個數字值,我想列出名稱,但按照數字值的順序排列。 xml文件類似於這樣:使用getElementsByTagName排序

<stories> 
    <story> 
     <name>fast</name> 
     <number>1000</number> 
    </story> 
    <story> 
     <name>bomb</name> 
     <number>2</number> 
    </story> 
    <story> 
     <name>descend</name> 
     <number>500</number> 
    </story> 
    <story> 
     <name>A</name> 
     <number>1</number> 
    </story> 
    <story> 
     <name>can</name> 
     <number>40</number> 
    </story> 
    <story> 
     <name>extremely</name> 
     <number>10000</number> 
    </story> 
</stories> 

更新: 和我的腳本看起來像這樣ATM:

<script type="text/javascript"> 
var xmlhttp = new XMLHttpRequest(); // code for IE7+, Firefox, Chrome, Opera, Safari 
testOpen = xmlhttp; 
testOpen.open("GET", "test.xml", false); 
xmlhttp.send(); 
testDoc = testOpen.responseXML; 
stories = testDoc.getElementsByTagName("story"); 
function display(){ 
    var arrayStory = Array.prototype.slice.call(stories, 0); 
    arrayStory.sort(function(a, b){ 
     return a.getElementsByTagName("number")[0].firstChild.nodeValue - b.getElementsByTagName("number")[0].firstChild.nodeValue; 
    }); 
    document.getElementById("show").innerHTML = arrayStory.map(function(story){ 
     return story.getElementsByTagName("name")[0].firstChild.nodeValue; 
    }).join("<br>"); 
}; 
</script> 

我有我的工作listorder這種方式。我的問題是,如何列出名稱旁邊的數字(或任何其他nodevalue)(不使用表格),以及如何在列表中創建條件/創建子列表(如果我不能,請幫助我創建一個列表,我可以),我會感謝您的幫助!提前致謝!

+0

@ArunPJohny假的,它是同步 – epascarello

+0

因此,將元素讀入數組並對該數組執行排序。 – epascarello

+0

你是要求我們爲你實現一個排序功能嗎? – abhinav

回答

0

display代碼應該這樣做:

var arr = [], 
    l = stories.length; 
for (var i=0; i<l; i++) 
    arr.push({ 
     story: stories[i], 
     number: parseInt(stories[i] 
          .getElementsByTagName("number")[0] 
          .firstChild.nodeValue, 10) 
     // seriosly, an attribute on the <story> element is more appropriate 
    }); 
arr.sort(function(a, b) { 
    return a.number - b.number; 
}); 
document.getElementById("show").innerHTML = arr.map(function(o) { 
    return o.story.getElementsByTagName("name")[0].firstChild.nodeValue; 
}).join("<br />"); 
+0

我無法使用此腳本獲得結果,但它的確幫助我獲得了列表順序工作,所以非常感謝。我更新了我的問題和上面的代碼。 – ml87

+0

感謝您的反饋,修正了我的錯誤:-) – Bergi