Javascript 使用JQuery解析XML(需要逻辑方面的帮助)

Javascript 使用JQuery解析XML(需要逻辑方面的帮助),javascript,jquery,xml,Javascript,Jquery,Xml,我试图在解析XML文档时生成HTML。问题是,我有一些变量需要在解析之前进行赋值——有人能告诉我一个解决方法吗 $.ajax({ url: 'doc.xml', type:'get', dataType:'xml', async:'false', success:function(xmlReply){ var out = ''; var businfo = ''; var businfoOne = '';

我试图在解析XML文档时生成HTML。问题是,我有一些变量需要在解析之前进行赋值——有人能告诉我一个解决方法吗

$.ajax({
    url: 'doc.xml',
    type:'get',
    dataType:'xml',
    async:'false',
    success:function(xmlReply){
        var out = '';
        var businfo = '';
        var businfoOne = '';
        var latFrom = '';
        var longFrom = '';
        var locationAt = '';
        var latTo = '';
        var longTo = '';
        $("#result").empty();

        out += '<ul id=\'resultslist\' data-role=\'listview\' data-theme=\'c\'>';
        $(xmlReply).find('itinerarie').each(function(){

            out += '<li data-role=\'list-divider\' data-theme=\'a\'>';
            locationAt = $(this).find('description').text();
            out += locationAt;
            out += '</li>';
            out += '<li><a href=\"#route_results_map\" onclick=\"plotMap(\''+businfo+'\','+latFrom+','+longFrom+','+latTo+','+longTo+')\">';  
            var count = 0;
            var transfer = $(this).find('route').length;
            $(this).find('route').each(function(){

                //display transfer
                if(count > 0){out+= '>>> Transfer To >>><br/>';}

                //display get on bus information
                if(count == 0){
                    businfo = $(this).find('bus').text();
                }
                out += $(this).find('bus').text();

                $(this).find('geton').each(function(){
                    //where to board the bus
                    if(count == 0){
                        latFrom = $(this).find('lat').text();
                        longFrom = $(this).find('long').text();
                    }
                    $(this).find('name').text();
                    out += '<br/>Leaves: '; 
                    out += $(this).find('time').text();
                })

                    //end geton
                    $(this).find('getoff').each(function(){
                        $(this).find('name').text();
                        out += ' <br/>Reaches: ';
                        out += $(this).find('time').text();
                        out += '<br/>';
                        latTo = $(this).find('lat').text();
                        longTo = $(this).find('long').text();
                    })
                        count++;
            })
                out += '</a></li>';
        })
            //out += '</ul>';
            $("#result").append($(out));
        $("#result").append('<ul>');
        $('#resultslist').listview();
    }//success
});//ajax
$.ajax({
url:'doc.xml',
类型:'get',
数据类型:'xml',
异步:'false',
成功:函数(xmlReply){
var out='';
var businfo='';
var businfone='';
var latFrom='';
var longFrom='';
var位置=“”;
var latTo=“”;
var longTo=“”;
$(“#结果”).empty();
out+='
    '; $(xmlReply).find('行程').each(函数(){ out+='; locationAt=$(this.find('description').text(); out+=位置at; out+=''; out+='
  • '; }) //out+='
'; $(“#结果”)。追加($(输出)); $(“#结果”).append(“
    ”); $('#resultslist')。listview(); }//成功 });//AJAX
在上面的代码中,我看不出在解析XML后不能延迟构建最终输出的原因。我稍微更改了代码,添加了一个新的临时变量
parse_out
,在解析过程中,您可以为项目构建HTML内容,然后在解析完所有内容后,将
  • 添加到最终输出中(现在设置了变量)从
    parse_out
    临时变量中提取HTML内容

    $.ajax({
        url: 'doc.xml',
        type:'get',
        dataType:'xml',
        async:'false',
        success:function(xmlReply){
            var out = '';
            var businfo = '';
            var businfoOne = '';
            var latFrom = '';
            var longFrom = '';
            var locationAt = '';
            var latTo = '';
            var longTo = '';
            $("#result").empty();
    
            out += '<ul id=\'resultslist\' data-role=\'listview\' data-theme=\'c\'>';
            $(xmlReply).find('itinerarie').each(function(){
    
                locationAt = $(this).find('description').text();
                var count = 0;
                var transfer = $(this).find('route').length;
                var parse_out = "";
                $(this).find('route').each(function(){
    
                    //display transfer
                    if(count > 0){parse_out+= '>>> Transfer To >>><br/>';}
    
                    //display get on bus information
                    if(count == 0){
                        businfo = $(this).find('bus').text();
                    }
                    parse_out += $(this).find('bus').text();
    
                    $(this).find('geton').each(function(){
                        //where to board the bus
                        if(count == 0){
                            latFrom = $(this).find('lat').text();
                            longFrom = $(this).find('long').text();
                        }
                        $(this).find('name').text();
                        parse_out += '<br/>Leaves: '; 
                        parse_out += $(this).find('time').text();
                    });
    
                        //end geton
                        $(this).find('getoff').each(function(){
                            $(this).find('name').text();
                            parse_out += ' <br/>Reaches: ';
                            parse_out += $(this).find('time').text();
                            parse_out += '<br/>';
                            latTo = $(this).find('lat').text();
                            longTo = $(this).find('long').text();
                        });
                            count++;
                });
                out += '<li data-role=\'list-divider\' data-theme=\'a\'>';
                out += locationAt;
                out += '</li>';
                out += '<li><a href=\"#route_results_map\" onclick=\"plotMap(\''+businfo+'\','+latFrom+','+longFrom+','+latTo+','+longTo+')\">';  
                out += parse_out;
                out += '</a></li>';
            });
            out += '</ul>';
            $("#result").append($(out));
            $('#resultslist').listview();
        }//success
    });//ajax
    
    $.ajax({
    url:'doc.xml',
    类型:'get',
    数据类型:'xml',
    异步:'false',
    成功:函数(xmlReply){
    var out='';
    var businfo='';
    var businfone='';
    var latFrom='';
    var longFrom='';
    var位置=“”;
    var latTo=“”;
    var longTo=“”;
    $(“#结果”).empty();
    out+='
      '; $(xmlReply).find('行程').each(函数(){ locationAt=$(this.find('description').text(); var计数=0; var transfer=$(this).find('route').length; var parse_out=“”; $(this).find('route').each(function(){ //显示传输 如果(计数>0){parse_out+='>>>传输到>>>
      ';} //显示上车信息 如果(计数=0){ businfo=$(this.find('bus').text(); } parse_out+=$(this.find('bus').text(); $(this).find('geton').each(function(){ //在哪里上车 如果(计数=0){ latFrom=$(this.find('lat').text(); longFrom=$(this.find('long').text(); } $(this.find('name').text(); 解析出+='
      叶:'; parse_out+=$(this.find('time').text(); }); //结束盖顿 $(this).find('getoff').each(function(){ $(this.find('name').text(); parse_out+='
      到达:'; parse_out+=$(this.find('time').text(); 解析出+='
      '; latTo=$(this.find('lat').text(); longTo=$(this.find('long').text(); }); 计数++; }); out+='; out+=位置at; out+=''; out+='
    • '; }); out+='
    '; $(“#结果”)。追加($(输出)); $('#resultslist')。listview(); }//成功 });//AJAX

    我也不明白你为什么在处理结束时注释掉关闭你的
    ,为什么在输出后附加一个空的
    ,我也将这一点更改为我认为可能是你想要的。

    你想分配给哪个变量,你能给出更多细节吗,基本上,我想要分配的变量是我正在解析的变量——所以现在,最终结果是:第1行没有值,第2行有第1行的值,第3行有第2行的值。