Parse html внутри cdata, используя jquery или javascript

Я получаю фид веб-сайта, который выглядит как

<rss...>
    <title> some title </title>
    <content>
         <![CDATA[ <div>this tag is ignored<div> who took the cookie in the cookie jar!?  ]]>
    </content>
</rss>

Мне нужно все содержимое cdata, которое будет отображаться в html. Я использую jquery 1.9.1, и когда я получаю часть контента с помощью $(xml).find('rss content').text(), он фактически игнорирует часть <div>this tag is ignored<div>. Любой способ получить все внутри CDATA с помощью javascript или jquery?

Ответ 1

Скорее всего, ваша разметка не обрабатывается как XML jQuery. Попробуйте явно вызвать $. ParseXML():

var contentText = $($.parseXML(xml)).find("rss content").text();

Ответ 2

Bottomline:

xmlDoc.getElementsByTagName("content")[0].childNodes[0].nodeValue

этот фрагмент из рабочего кода использует jquery для загрузки xml, а затем получает 4-е место тега контента (который содержит CDATA)

var req = new AjaxRequest(); 
req.setMethod("POST"); 
...
req.loadXMLDoc(linkString, paramString);
var htmlContent = req.getResponse().responseXML.getElementsByTagName('content').item(3).childNodes[0].nodeValue;

Ответ 3

jQuery не является лучшим при анализе XML-документов из строки. Было бы лучше использовать собственный DOM Parser для браузера. jQuery может более эффективно работать с анализируемым XML-документом; в противном случае я считаю, что он попытается работать с ним, как с XML, который производит странные результаты.

$xml = $((new DOMParser).parseFromString(xml, "text/xml"));

http://jsfiddle.net/ExplosionPIlls/2MJt9/

EDIT: на основе другого ответа $.parseXML, возможно, является лучшим вариантом, так как он должен работать с другими браузерами, но вам придется использовать его аналогично выше, поскольку результат - это XML-документ, а не объект jQuery.

$xml = $($.parseXML(xml));

Ответ 4

текст с CDATA в jQuery можно получить, получив сначала данные childNodes:

!$.ajax(YOUR_URL,{
dataType: 'xml',
success: function (dataR, textStatus, jqXHR){ 
var rrsobj = $(dataR).find('rss');
if(rrsobj ){
  desc = $(rrsobj [0]).children('content');  
  if(desc)
    var txt = desc[0].childNodes[0].data; }
}});

где dataR был прочитан с YOUR_URL, а txt содержит информацию из CDATA