2011-07-06 4 views
2

jquery(またはpure javascript)を使用して複数のxmlDocumentsを1つのファイル(var newResult)にマージできますか?jquery:XML文書をマージする

私は残念ながら、別のホストされたxmlドキュメントを1つのファイルに結合する必要があります(理由を聞かないでください...)。私は別のテクニックで遊んだことがありますが、私はこれについての解決策を見つけることができません(おそらく、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を使用するのですか?あなたは無名関数を作成していて、インデックス内を渡すことができますが、これは一定のままです(Closures 'n all)、そうですか?小さなカウンタと別のコールバックを使用すると、すべてが非同期にロードされたときにそれらを順番に処理できます。 –

+0

私の結果は "temp"です: "[オブジェクトXMLDocument] [オブジェクトXMLDocument] [オブジェクトXMLDocument]"正しい結果が "Document"でなければなりません - 何が問題なのですか? – mate64

+0

@Alexander、正確には、私はmsecが要求した場合、彼のニーズに応じて解決するのと同じような解決策を提示したでしょう。 –

関連する問題