2013-02-19 21 views
11

Dostaję paszy internetową, która wygląda takparse html wewnątrz CDATA jQuery lub JavaScript

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

muszę całą zawartość CDATA być wyświetlany w formacie HTML. Używam jquery 1.9.1 i kiedy dostaję część treści przy użyciu $(xml).find('rss content').text(), to faktycznie ignoruje całą część <div>this tag is ignored<div>. W jaki sposób uzyskać wszystko wewnątrz CDATA przy użyciu javascript lub jquery?

+0

CDATA służy do ukrywania danych z analizatora składni, aby nie były przetwarzane w DOM jako HTML. Próbuję zrozumieć, dlaczego twój html jest ukryty w CDATA? Czy możesz to po prostu zaimplementować? –

+0

Czy próbowałeś użyć 'html()' zamiast 'text()'? – Stefan

Odpowiedz

6

Prawdopodobnie twój znacznik nie jest analizowany jako XML przez jQuery. Spróbuj jawnie powołując $.parseXML():

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

jQuery nie jest najlepiej w parsowania dokumentów XML z ciągiem. Byłoby lepiej używać macierzystego analizatora DOM przeglądarki. jQuery może wtedy lepiej pracować z przeanalizowanym dokumentem XML; inaczej wierzę, że spróbuje z nim pracować jak XML, który daje dziwne wyniki.

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

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

EDIT: na podstawie innej odpowiedzi, $.parseXML jest prawdopodobnie lepszym rozwiązaniem, ponieważ to powinno działać z innymi przeglądarkami, ale trzeba by użyć go w sposób podobny do powyższego, ponieważ wynikiem jest dokument XML, a nie obiekt jQuery.

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

Masz rację, zupełnie zapomniałem dodatkowego połączenia z '$()' wokół '$ .parseXML()'. Zaktualizowałem swoją odpowiedź, dzięki za heads-up :) –

3

bottomline:

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

ten fragment z kodeksu pracy wykorzystuje jQuery załadować xml i następnie pobiera 4th wystąpienie zmiennej zawartości (który zawiera CDATA)

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

tekst CDATA w jQuery można odzyskać, pobierając najpierw dane 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; } 
}}); 

gdzie dataR została odczytana z YOUR_URL, a txt zawiera informacje z CDATA

Powiązane problemy