2015-09-07 1 views
1

У меня очень длинный список XML, разделенных на разделы. Для каждой страницы он загружает контент из XML на основе узла категории (list_node). На данный момент я занимаюсь контентом, напрямую ссылаясь на узлы, но не хочу, чтобы я вставлял строки для каждого отдельного узла.Как загружать XML-узлы и содержимое в переменные динамически

Есть ли способ просто прочитать XML, загрузить узлы в массив, а затем установить новую переменную в качестве имени узла и загрузить содержимое? Это моя текущая настройка:

<media_item> 
<title>temporary title</title> 
<key>652843722</key> 
<path>/states/CA</path> 
<filename>climate-pollution-harmful.html</filename> 
<link>http://a-url-goes-here.com</link> 
<blank>yes</blank> 
<author/> 
<date>August&nbsp;15,&nbsp;2015</date> 
</media_item> 

(XML, имеет гораздо больше узлов, то, что и различные категории все заданные с помощью «list_node» звонок раньше в моем коде)

$.ajax({ 
     type: "GET", 
     url: "http://url-of/file.xml, 
     dataType: "xml", 
     success: function(xml){    
      $(xml).find(list_node).each(function(i){ 
       var title = $(this).find('title').text(); 
       var url = $(this).find('link').text(); 
       var date = $(this).find('date').text(); 
       var author = $(this).find('author').text(); 
       var org = $(this).find('org').text(); 

Таким образом, вместо "var title = $ (this) .find ('title'). text();" для каждого отдельного узла мне просто хотелось бы сделать это автоматически.

+0

взгляд на "xml2json" процедуры, как JsonML – dandavis

ответ

0

Если все узлы просто текстовые узлы, которые вы можете петлю над children() и создать массив объектов с использованием tagName «S в качестве имен свойств

$.get('data.xml', function (xml) { 

    var results = $(xml).find('media_item').map(function() { 
     var row = {} 
     $(this).children().each(function() { 
      row[this.tagName] = $(this).text(); 
     }); 
     return row; 
    }).get(); 

    console.log(results); 

}, 'xml'); 

Это может быть легко адаптировано для включения атрибутов, а также.

Приведенный выше код преобразует XML, показанный на:

[ 
{ 
    "title": "temporary title", 
    "key": "652843722", 
    "path": "/states/CA", 
    "filename": "climate-pollution-harmful.html", 
    "link": "http://a-url-goes-here.com", 
    "blank": "yes", 
    "author": "", 
    "date": "August 15, 2015" 
} 
] 

DEMO

+0

отличное решение, что действительно помогает мне! Спасибо @charlietfl – Ben