用Javascript对XML数据进行排序

用Javascript对XML数据进行排序,javascript,html,xml,xml-parsing,Javascript,Html,Xml,Xml Parsing,我需要一些JavaScript方面的帮助。我正在使用XML,所以我需要在其中实现JavaScript,我想对元素节点名进行排序。请看下图,这将使你清楚我在说什么。请我想要的代码与JavaScript而不是Jquery 函数生成(节点){ 如果(node.nodeType!=1)返回“”; var html=“”+node.nodeName; var htmlForChildNodes=“”; 对于(var i=0;i

我需要一些JavaScript方面的帮助。我正在使用XML,所以我需要在其中实现JavaScript,我想对元素节点名进行排序。请看下图,这将使你清楚我在说什么。请我想要的代码与JavaScript而不是Jquery



函数生成(节点){
如果(node.nodeType!=1)返回“”;
var html=“
  • ”+node.nodeName; var htmlForChildNodes=“”; 对于(var i=0;i”+htmlForChildNodes+””; } html+=“
  • ”; 返回html; }


    谢谢

    您应该解析xml文档并将其放入javascript对象数组中。这些很容易分类

    因此,与其调用
    generate(xmlDoc.documentElement)
    直接从xml返回html,不如添加一个
    parse(xmlDoc.documentElement)
    函数,返回数组数组。在此之后,更改generate()函数以获取具有子属性的对象,该子属性是数组,而不是原始xml dom

    解析应该如下所示:

    function parse(node) {
        if (node.nodeType != 1) return null;
        var result = {name: node.nodeName};
        var children = [];
        for (var i = 0; i < node.childNodes.length; i++) {
            var child = parse(node.childNodes[i]);
            if (child)
            {
                children.push(child);
            }
        }
        result.children = children;
        return result;
    }
    
    函数解析(节点){
    如果(node.nodeType!=1)返回null;
    var result={name:node.nodeName};
    var children=[];
    对于(var i=0;i
    现在,您可以通过创建子对象对数组进行排序

    排序后,调用(已更改)
    generate()
    函数,该函数将迭代对象/数组以生成html


    。我将
    generate()
    函数的更改留给了您。(使用您的浏览器控制台检查生成的数据结构)

    先生,我很困惑,需要一个实时的小提琴小提琴小提琴中有一些注释,解释仍然需要做什么。
    function generate(node) {
        if (node.nodeType != 1) return "";
        var html = "<li>" + node.nodeName;
        var htmlForChildNodes = "";
        for (var i = 0; i < node.childNodes.length; i++) {
            htmlForChildNodes += generate(node.childNodes[i]);
        }
        if (htmlForChildNodes) {
            html += "<ul>" + htmlForChildNodes + "</ul>";
        }
        html += "</li>";
        return html;
    }
    
    function parse(node) {
        if (node.nodeType != 1) return null;
        var result = {name: node.nodeName};
        var children = [];
        for (var i = 0; i < node.childNodes.length; i++) {
            var child = parse(node.childNodes[i]);
            if (child)
            {
                children.push(child);
            }
        }
        result.children = children;
        return result;
    }