如何将XML对象与jQuery/JavaScript合并
我想将不同XML文件的数据合并到一棵大XML树中。我的想法是将所有即将到来的节点附加到第一个XML文件的根节点。但是,在尝试调用“mergedXml.documentElement.appendChild”时,我遇到了一个“TypeError”。这是我的代码:如何将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
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);
}
}
});
});