2013-06-18 29 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