2011-07-06 86 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要求的解決方案,這一切都取決於他的需求。 –