проблемы с созданием html из XML-файла с пространством имен и атрибутом

#jquery #ajax #xml #namespaces

#jquery #ajax #xml #пространства имен

Вопрос:

У меня проблема с использованием внешнего XML-файла для моего проекта AJAX. Когда я меняю XML-переменную AJAX на содержимое XML, я получаю правильный вывод. Но вывод приведенного ниже кода «не определен». Что я делаю не так?

html и AJAX-код

 <html>
<head><title>xml file in jquery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>

 <table>
 </table>

<script>


$(document).ready( function() {
    Dataextract();
    fetch();
});

function fetch() {

        setTimeout( function() {
        corporateData();
        fetch();
    }, 10000);

}

function Dataextract() {

    $.ajax({ 
    type: "GET",
     url: "test.xml",
     dataType: "xml",    
     success: function(xml) {


 $("table").children().remove();

      $(xml).find("feed").each( function() {

    var $entry = $(this);
       var mydata = $entry.find('w\:entry').attr('w:date');

 document.write(mydata);

       $("table").append(info);

      });

     },
    }); 
};

</script>
</body>
</html>
  

Мой внешний XML-файл (‘test.xml ‘) выглядит примерно так:

 <rsp><feed><w:entry w:date="2012-08-15" w:circulation="154" w:hits="538" w:downloads="0" w:reach="30"/></feed></rsp>
  

Комментарии:

1. Вы добавляете info переменную, но она не существует: $("table").append(info);

Ответ №1:

Я думаю, что проблема заключается в попытке двойного экранирования ‘:’. Попробуйте это:

 var mydata = $entry.find('w:entry').attr('w:date');
  

Либо это, либо, возможно, проблема в том, что вы не экранировали имя атрибута? Я не использовал пространства имен при синтаксическом анализе Xml с помощью jQuery, но это может быть другим решением:

 var mydata = $entry.find('w\:entry').attr('w\:date');
  

В качестве альтернативы, если это не поможет, попробуйте добавить некоторый отладочный код и использовать console.log. Я бы начал с этого:

 var mydata = $entry.find('w:entry');
console.log(mydata);
console.log(mydata.length);
  

Это, по крайней мере, скажет вам, работает ли ваше выражение find.

Я не уверен, искали ли вы решение этой проблемы, но, как кто-то упомянул в комментариях, у вас также есть некоторые проблемы с тем, что вы пытаетесь добавить к этой таблице.

Во-первых, как уже упоминалось, у вас нет объявленной переменной «info». Во-вторых, единственное, что вы извлекаете из Xml, — это дата (строка). Вам не повезет, если вы попытаетесь добавить это в $(‘table’) . Вам нужно будет использовать либо document.createElement, чтобы добавить строку ячейки, либо создать Html-строку, содержащую эту информацию.

ie:

 jQuery('table').append(
    jQuery(document.createElement('tr')).append(
        jQuery(document.createElement('td')).text('your value')
    )
);
  

или

 jQuery('table').append('<tr><td>yourvalue</td></tr>');
  

Ответ №2:

Похоже, что синтаксический анализ этого xml сложен.

Это работает для меня, по крайней мере, в Chrome: var mydata = $entry.find('entry').attr('w:date');

Таким образом, вы можете оставить w\: