2011-07-06 60 views
2

是否有可能通过使用jquery(或纯javascript)将多个xmlDocuments合并成一个文件(var newResult)?jquery:合并XML文档

不幸的是,我必须将不同的托管xml文档合并成一个文件(不要问我为什么......)。我玩过不同的技术,但我找不到解决方案(可能jQuery没有准备好用于xml处理?)。谢谢:)

看到我的一段代码:

var files = ['john.xml','doe.xml'] 
var newResult, temp; 

function loadMyXMLFiles(){ 

    // > let's load file by file using jquery's ajax-call: 

    $.each(files, function(index,value) { 

     $.ajax({ 

      url: value, 
      cache: true, 
      success: function(data){ 

      // > check if temp is empty, append or fill 

      (temp) ? temp += (data) : temp = data; 


      // > on complete: 

      if (index == files.length-1) { 

       xmlResult = temp; temp = null; 
      } 
      } 

     }); 
    }); 
} 

loadMyXMLFiles() 

enter image description here

+0

如果你添加了'dataType:“xml”'给你的ajax调用,jquery会将你的xml解析成一棵dom树。然后你可以递归合并树和现有的树。 – Fox32

回答

1

正如我所看到的,你想将它们串联。如果这是你需要什么,你的代码是不是说不好,

var files = ['john.xml','doe.xml'] 
var xmlResult, temp = ""; //Make temp an empty string 

loadMyXMLFiles(){ 
    $.each(files, function(index,value) { 
     $.ajax({ 
      url: value, 
      cache: true, 
      async: false, //This is crucial! 
      success: function(data){ 
      temp += data; 
      if (index == files.length-1) { 
       xmlResult = temp; temp = null; 
      } 
      } 
     }); 
    }); 
} 

你必须使用async: false这样你的文件按顺序到达。但请注意,这会挂起浏览器直到处理完成。如果不发生这种情况至关重要,请告诉我。

希望这会有所帮助。欢呼

+0

为什么使用async false?你正在创建一个匿名函数,并且可以传入索引,这将保持不变(闭包全部),对吗?使用一个小计数器和另一个回调函数,您可以在它们全部异步加载时按顺序处理它们。 –

+0

我对“temp”的结果返回:“[object XMLDocument] [object XMLDocument] [object XMLDocument]”,但正确的结果应该是“Document” - 出了什么问题? – mate64

+0

@亚历山大,正好,我会给出类似于msec要求的解决方案,这一切都取决于他的需求。 –