jQuery - чтение из xml-файла, сгенерированного программой, и рендеринг на странице - скрипт разрыва амперсанда

0

Если у меня есть текст вроде

Название: БЕЗОПАСНОЕ И ЗВУК Исполнитель: СТОЛИЧНЫЕ ГОРОДА

Он отлично работает, но как только программа вводит текст, как

Название: SAFE & SOUND художник: СТОЛИЧНЫЕ ГОРОДА

сценарий не будет отображать его. Если я попытаюсь выйти из строки, она превратит пробелы в %20, но все еще ничего не может сделать с помощью & и не сможет вообще отобразить эту вещь.

Примечание. Мы не можем изменить способ рендеринга файла xml, а также то, что он отображает, технически недействительным. XML (без объявления или кодировки символов, а также не удаляются). Мы должны работать с тем, что нам дано.

вот часть скрипта:

jQuery(document).ready(function($)
{
    function getSong() {
       var song= $.ajax({
            type: "GET",
            url: "/dalet/nowplaying2.xml",
            dataType: "xml",
            async : false,
            cache : false,
        }).responseXML;

   $(song).find('Current').each(function(){

     var title = $(this).find("titleName").text();
     var artist = $(this).find("artistName").text();

     $("#nowsongtitle").html(title);
     $("#nowsongartist").html(artist);

  });
   }
setInterval(function() {
getSong();
}, 5000);
});

Вот как выглядит XML, выходящий из программы (Dalet 5.1)

<BroadcastMonitor>
<updated>2013-11-30T13:53:25</updated>
<stationName>Unknown</stationName>
<Current>
    <startTime>2013-11-30T13:53:25</startTime>
    <titleId>8839</titleId>
    <itemCode></itemCode>
    <itemReference></itemReference>
    <titleName>Safe And Sound</titleName>
    <artistName>Capital Cities</artistName>
    <albumName>Hitzone 67 (CD2)</albumName>
</Current>
<Next>
    <startTime>2013-11-30T13:56:36</startTime>
    <itemId>1000000627:7514</itemId>
    <titleId>8827</titleId>
    <itemCode></itemCode>
    <itemReference></itemReference>
    <titleName>L'amour</titleName>
    <artistName>Karim Ouellet</artistName>
    <albumName>Fox</albumName>
</Next>
</BroadcastMonitor>
  • 0
    амперсанд не разрешен в XML, за исключением некоторых тегов, таких как тег заголовка, если я правильно помню, поэтому, если он что-то ломает, то, что он ломает, не работает должным образом
  • 0
    Я бы просто обманул и сделал это -> jsfiddle.net/vjvFc
Показать ещё 7 комментариев
Теги:

1 ответ

0

Похоже, ваш XML-документ неправильно закодирован. Вам либо нужно избежать амперсанда:

<titleName>Safe &amp; Sound</titleName>

или поместить содержимое этого тега в раздел CDATA:

<titleName><![CDATA[Safe & Sound]]></titleName>

Если вы не можете изменить сам документ xml, вам может потребоваться выполнить замену строки в xml, возвращаемом с сервера, прежде чем использовать декодер jQuery xml для его анализа. Если вы посмотрите на документацию jQuery.ajax, там есть раздел, описывающий настройку декодера ответа.

  • 0
    Опять же, мы не можем контролировать, как Dalet выводит XML. насколько мы можем судить, это не настраивается. это именно то, как вы это видите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню