2016-03-21 2 views
2

Я пытаюсь прочитать XML-файл, а затем сохранить некоторые данные из него в массив. Затем мне нужно пройти через массив и вставить элементы в конкретный узел. Например, это мой XML-файл:Вставить значения из массива в определенный узел в xml

<?xml version="1.0" encoding="UTF-8" ?> 
<contact> 
    <name> 
    <header> 
     <de>Hallo</de> 
     <en>Hello</en> 
    </header> 
    </name> 
    <name> 
    <header> 
     <de>Welt</de> 
     <en>World</en> 
    </header> 
    </name> 
</contact> 

и это то, что я хочу получить:

<?xml version="1.0" encoding="UTF-8" ?> 
<contact> 
    <name> 
    <header> 
     Hello 
    </header> 
    </name> 
    <name> 
    <header> 
     World 
    </header> 
    </name> 
</contact> 

У меня есть проблема, когда мне нужно вставить в массив значений узла заголовка.

$.ajax({ 
    type: "GET", 
    url: '1.xml', 
    dataType: "xml", 
    success: function(xml) { 
    var values = []; 
    $(xml).find('header').each(function() { 
     var text = $(this).find(lang).text(); 
     values.push(text); 
    }); 

    $(xml).find('header').each(function() { 
     $(xml).find('de').remove(); 
     $(xml).find('en').remove(); 
    }); 

    // this part where I have problem 
    $(xml).find('header').each(function() { 
     $.each(values, function(i, val) { 
     $(xml).find('header').append(val); 
     }); 
    }); 
    }) 
}); 

ответ

2

Вы можете попробовать это на месте последнего цикла: (он заменит содержание родителя (<header>) значением (<en>)

$(xml).find('header en').each(function() { 
    $(this).parent().html($(this).html()); 
}); 
+0

но это жесткое кодирование ?! зависит от переменной 'lang', иногда мне нужно заменить содержимое с' ' – Christian

+0

Вы можете заменить' en' параметром lang 'find ('header' + lang)' –

+0

спасибо! он отлично работает – Christian

1

Try This:

 $(document).ready(function(){ 
      var lang="de"; 
      $.ajax({ 
       type: "GET", 
       url: '1.xml', 
       dataType: "xml", 
       success: function (xml) { 
        var values = []; 
        $(xml).find('header').each(function() { 
         var text = $(this).find(lang).text(); 
         values.push(text); 
        }); 

        $(xml).find('header').each(function() { 
         $(xml).find('de').remove(); 
         $(xml).find('en').remove(); 
        }); 

        // Replace the following changes 
        $(xml).find('header').each(function (i) { 
         var nodGen='<'+lang+'>' + values[i] + '</'+lang+'>'; 
         $(this).append(nodGen); 
        }); 

        // Show new XML 
        alert((new XMLSerializer()).serializeToString(xml)); 
       } 
      }); 
     }); 
Смежные вопросы