Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将XML对象与jQuery/JavaScript合并_Javascript_Jquery_Xml_Xml Parsing_Merge - Fatal编程技术网

如何将XML对象与jQuery/JavaScript合并

如何将XML对象与jQuery/JavaScript合并,javascript,jquery,xml,xml-parsing,merge,Javascript,Jquery,Xml,Xml Parsing,Merge,我想将不同XML文件的数据合并到一棵大XML树中。我的想法是将所有即将到来的节点附加到第一个XML文件的根节点。但是,在尝试调用“mergedXml.documentElement.appendChild”时,我遇到了一个“TypeError”。这是我的代码: var mergedXml = undefined; $.each(files, function(index, value) { $.ajax({ url: value, cache: true, asyn

我想将不同XML文件的数据合并到一棵大XML树中。我的想法是将所有即将到来的节点附加到第一个XML文件的根节点。但是,在尝试调用“mergedXml.documentElement.appendChild”时,我遇到了一个“TypeError”。这是我的代码:

var mergedXml = undefined;

$.each(files, function(index, value) {
  $.ajax({
    url: value,
    cache: true,
    async: false,
    dataType: 'text',
    success: function(data) {
      var xmlDocument = $.parseXML(data);

      if (typeof mergedXml === 'undefined') {
        mergedXml = xmlDocument;
      } else {
        // New children
        var childNodes = xmlDocument.documentElement.childNodes;
        var children = childNodes.length;
        for (var i = 0; i < children; i++) {
          var node = childNodes[i];
          // How to append these nodes to the mergedXml root?
          // I tried:
          // mergedXml.documentElement.appendChild(node);
          // But then I get...
          // TypeError: Argument 1 of Node.appendChild is not an object. 
        }
      }
    }
  });
});
var mergedXml=未定义;
$.each(文件、函数(索引、值){
$.ajax({
url:value,
是的,
async:false,
数据类型:“文本”,
成功:功能(数据){
var xmlDocument=$.parseXML(数据);
if(类型合并DXML==='undefined'){
mergedXml=xmlDocument;
}否则{
//新生儿童
var childNodes=xmlDocument.documentElement.childNodes;
var childrends=childNodes.length;
对于(变量i=0;i

也许您可以帮我?

我怀疑您所遇到的错误是由于从原始父节点中删除了节点,因此您试图访问不再存在的节点。我建议将
for
循环替换为
while
循环:

var node;
while (xmlDocument.documentElement.hasChildNodes()) {
    node = xmlDocument.documentElement.childNodes[0];
    mergedXml.documentElement.appendChild(node); 
}
完整解决方案:

  var mergedXml = undefined;
  $.each(files, function(index, value) {
    $.ajax({
      url: value,
      cache: true,
      async: false,
      dataType: 'text',
      success: function(data) {
        var xmlDocument = $.parseXML(data);

        if (typeof mergedXml === 'undefined') {
          // Init XML collection
          mergedXml = xmlDocument;
        } else {
          // Add new children to XML collection
          var node;
          while (xmlDocument.documentElement.hasChildNodes()) {
            node = xmlDocument.documentElement.childNodes[0];
            mergedXml.documentElement.appendChild(node);
          }
        }

        if (index === files.length - 1) {
          console.log('Total nodes in root: ' + mergedXml.documentElement.childNodes.length);
        }
      }
    });
  });