Javascript 使用getElementsByTagName进行排序

Javascript 使用getElementsByTagName进行排序,javascript,xml,Javascript,Xml,我想解析一个xml文件,并以与xml中不同的顺序列出元素。每个子元素都有一个名称和一个数值,我想按数值的顺序列出名称。xml文件与此类似: <stories> <story> <name>fast</name> <number>1000</number> </story> <story> <name>bomb</name&

我想解析一个xml文件,并以与xml中不同的顺序列出元素。每个子元素都有一个名称和一个数值,我想按数值的顺序列出名称。xml文件与此类似:

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

快速的
1000
炸弹
2.
下降
500
A.
1.
可以
40
极其
10000
更新: 我的脚本看起来像这个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>

var xmlhttp=new XMLHttpRequest();//IE7+、Firefox、Chrome、Opera、Safari的代码
testOpen=xmlhttp;
open(“GET”,“test.xml”,false);
xmlhttp.send();
testDoc=testOpen.responseXML;
stories=testDoc.getElementsByTagName(“story”);
函数显示(){
var arrayStory=Array.prototype.slice.call(故事,0);
排序(函数(a,b){
返回a.getElementsByTagName(“编号”)[0].firstChild.nodeValue-b.getElementsByTagName(“编号”)[0].firstChild.nodeValue;
});
document.getElementById(“show”).innerHTML=arrayStory.map(函数(故事){
return story.getElementsByTagName(“名称”)[0].firstChild.nodeValue;
}).加入(“
”); };

我的列表顺序是这样工作的。我的问题是,如何在名称旁边列出数字(或任何附加节点值)(不使用表格)以及如何在这样的列表中设置条件/创建子列表(如果我不能,请在我可以的地方帮助我创建列表),我将感谢您的帮助!提前谢谢

我建议您使用Json而不是XML


然后,您可以使用javascript sort()方法对JSON进行排序,您可以在这里找到答案:

这个
显示
代码应该这样做:

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 />");
var arr=[],
l=故事长度;

对于(var i=0;i@ArunPJohnyfalse,这是同步的,因此将元素读入数组并对该数组执行排序。您是否要求我们为您实现排序功能?到目前为止,我还不知道自己的工作方式,我的尝试最终没有显示任何关于xml的内容。我发布了一个代码示例部分,因为如果您给我一个提示,我可以使用它来访问更多子元素。请向我们展示您的尝试,以便向您解释错误所在:-)我无法使用此脚本获得结果,但它确实帮助我使listorder正常工作,因此非常感谢。我已更新了我的问题和上面的代码。感谢反馈,修复了我的错误:-)