2011-01-11 7 views
5

Я кодирую RSS-ридер в Javascript, используя XMLHttpRequest.Чтение раздела XML CDATA с]] в нем

Для некоторых RSS-каналов у меня не было никаких проблем, но в некоторых случаях атрибут xmlDocument.firstChild всегда NULL

был После попытки увидеть различие между XML, которые работали и те, которые не работали, я обнаружил, что следующее является причиной ошибки.

<item> 
    <description> 
     <![CDATA[This is a description for a test [...]]]> 
    </description> 
</item> 

Потому что в этом описании тега У меня есть закрывающая скобка следует закрытие скобок CDATA вызывает мою ошибку, я сделал код с C# с помощью LINQ для того же XML и все работал.

Закрывающая скобка, которая находится непосредственно перед закрывающими кронштейнами CDATA, вызывает это странное поведение. В качестве теста я попытался прочитать тот же XML, используя C# и LINQ, все сработало хорошо.

Тогда я попытался добавить пробел между закрывающими скобками, как показано на следующий

<![CDATA[This is a description for a test [...] ]]>

И это сработало!

мой код Javascript

function LoadRSS() { 
    http_request.onreadystatechange = function() { showContent(http_request); }; 
    http_request.open("GET", "./feeds/test.xml", true); 
    http_request.send(false); 
} 


function showContent(http_request) { 
    if (http_request.readyState == 4) { 
     if (http_request.status == 200) { 
      var parser = new DOMParser(); 
      var xml_doc = parser.parseFromString(http_request.responseText, "text/xml"); 
      alert(xml_doc.firstChild) 
     } 
     else { 
      xml_doc = null; 
     } 
    } 
} 

Кто-нибудь сталкивались с что-то подобное? Теперь я действительно не знаю, как приступить к комментариям и предложениям.

+1

Это, кажется, ошибка в XML-синтаксическом анализаторе. Какую ОС/браузер/версию вы используете? – Phrogz

+0

Браузер называется OBIGO, это браузер для мобильных телефонов – YasuDevil

+1

Да, сломанный браузер. Раздел CDATA может содержать комбинации ']]'; только полный ']]>' заканчивает его. – StaxMan

ответ

5

Независимо от используемого вами браузера, похоже, неправильно обрабатывает разделы CDATA - только ]]> отмечает конец раздела, любые другие квадратные скобки не должны влиять на это вообще.

+0

Ну, заменив скобки, вероятно, исправит мою проблему. Я попытаюсь запустить тот же код в другом браузере, чтобы узнать, что произойдет. – YasuDevil

+1

Первая часть права, вторая неправильная - да, вы можете включать объекты, но нет, они НЕ будут проанализированы, но будут включены точно так, как они есть. Таким образом, вы не можете использовать сущности для цитирования чего-либо. – StaxMan

+1

@StaxMan: Извините, я неверно истолковал этот раздел - это только для значений атрибутов, а не для общих разделов CDATA. @YasuDevil: Я думаю, что мое решение не будет работать в конце концов. – casablanca

1

Что касается «как действовать» ... почему бы просто не включить пробел до конца блока CDATA? У вас нет контроля над сгенерированным XML? Если это так, вы можете использовать JS для:

+0

Да, это хорошее решение, спасибо всем – YasuDevil

Смежные вопросы