XML в массив JavaScript с помощью jQuery - PullRequest
10 голосов
/ 01 июля 2011

Я новичок в XML и AJAX и являюсь новичком в Javascript и jQuery.Среди других рабочих обязанностей я занимаюсь дизайном нашего сайта.Крайний срок очень близок, и единственный способ, которым я могу придумать, чтобы сделать этот проект хорошо, - это AJAX.У меня есть документ, полный объектов XML, такой как этот, повторяющийся:

<item>
    <subject></subject>
    <date></date>
    <thumb></thumb>
</item>

Я хочу создать массив всех элементов и их дочерних элементов.Я часами читаю учебные пособия по jQuery по AJAX и даже не знаю, с чего начать, потому что все они предполагают определенный уровень владения JavaScript.Если бы кто-то мог показать мне самый простой способ перебрать все элементы и поместить своих детей в массив, я был бы признателен за это.

Ответы [ 4 ]

12 голосов
/ 01 июля 2011

Используя jQuery, $.ajax() ваш XML-файл и в случае успеха передайте извлеченные данные с помощью each, например:

 var tmpSubject, tmpDate, tmpThumb;
 $.ajax({
            url: '/your_file.xml',
            type: 'GET', 
            dataType: 'xml',
            success: function(returnedXMLResponse){
                $('item', returnedXMLResponse).each(function(){
                     tmpSubject = $('subject', this).text();
                     tmpDate = $('date', this).text();
                     tmpThumb = $('thumb', this).text();
                    //Here you can do anything you want with those temporary
                    //variables, e.g. put them in some place in your html document
                    //or store them in an associative array
                })
            }  
        }); 
5 голосов
/ 15 декабря 2012

Я написал это ... довольно простой способ взять хорошо отформатированный ответ / строку XML, проанализировать его с помощью jquery и затем преобразовать в массив.

var response = '<?xml version="1.0" encoding="UTF-8"?><root><node1>something</node1></root>  

var xmlDoc = $.parseXML( response );

var myArray = getXMLToArray(xmlDoc);

alert(myArray['root']['node1']);
//Pop up window displaying the text "something"

function getXMLToArray(xmlDoc){
    var thisArray = new Array();
    //Check XML doc
    if($(xmlDoc).children().length > 0){
    //Foreach Node found
    $(xmlDoc).children().each(function(){    
        if($(xmlDoc).find(this.nodeName).children().length > 0){
        //If it has children recursively get the inner array
        var NextNode = $(xmlDoc).find(this.nodeName);
        thisArray[this.nodeName] = getXMLToArray(NextNode);
        } else {
        //If not then store the next value to the current array
        thisArray[this.nodeName] = $(xmlDoc).find(this.nodeName).text();
        }
    });
    }
    return thisArray;
}

Надеюсь, это поможет !!

3 голосов
/ 11 сентября 2013

Я добавил в ваш скрипт Troublesum

function getXMLToArray(xmlDoc){
  var thisArray = new Array();
  //Check XML doc
  if($(xmlDoc).children().length > 0){
    //Foreach Node found
    $(xmlDoc).children().each(function(){
      if($(xmlDoc).find(this.nodeName).children().length > 0){
        //If it has children recursively get the inner array
        var NextNode = $(xmlDoc).find(this.nodeName);
        thisArray[this.nodeName] = getXMLToArray(NextNode);
      } else {
        //If not then store the next value to the current array
        thisArray[this.nodeName] = [];
        $(xmlDoc).children(this.nodeName).each(function(){
          thisArray[this.nodeName].push($(this).text());
        });
      }
    });
  }
  return thisArray;
}

Теперь он также поддерживает много детей с одинаковыми именами в XML.например,

XML, являющийся

<countries>  
  <NL>   
    <borders>
      <country>Germany</country>
      <country>Belgium</country>

country.NL.borders [1] даст Германии.

3 голосов
/ 01 июля 2011

Если вы используете jQuery, то parseXML впитает весь XML-документ в используемую структуру данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...