2010-12-10 37 views
0

Je peux directement lire le flux XML en utilisant jQuery, mais quand j'affiche le document XML de retour en utilisant 'console.log', la balise 'description' affiche seulement '# cdata-section' dans la console, mais il est capable d'afficher le contenu complet quand je les mets dans le HTML. La sortie est un contenu complet d'un article, comme ci-dessous «Exemple de contenu».lire XML via jQuery (lire la variable)

Contenu de l'échantillon:

<p> line 1 line 1 line 1</p> 
<p> line 2 line 2 line 2</p> 
<img src='..' /> 
<p> ... ... </p> 

Maintenant, si je récupère via .ajax en utilisant jQuery, je vais utiliser un 'desc' variable pour contenir ce noeud 'description' (qui tenant au-dessus du contenu de l'échantillon) , mais comment je lis combien d'éléments 'p' ou 'img' dans cette variable 'desc'? Je veux obtenir l'élément what à l'intérieur de cette variable 'desc', mon objectif est de lire la balise img. Y a-t-il un moyen de le faire? Note: avant de mettre dans le corps du HTML.

XML:

<channel>​ 
<title>​Property​</title>​ 
<link>​</link>​ 
<lastbuilddate>​Wed, 13 Oct 2010 23:50:51 GMT​</lastbuilddate>​ 
<generator>​FeedCreator 1.8.0-dev ([email protected])​</generator>​ 
<atom:link href=​"sample.com" rel=​"self" type=​"application/​rss+xml">​</atom:link>​ 
<item>​ 
    <title>​sample title​</title>​ 
    <description>​ 
    #cdata-section 
    </description>​ 
    <pubdate>Wed, 08 Dec 2010 23:04:25 GMT</pubdate> 
</item>​ 
<channel>​ 

jQuery:

$.ajax({ 
type: "GET", 
url: "http://feed6.xml", 
dataType: "xml", 
success: function(xml) { 
    console.log(xml); 
    $(xml).find('channel').each(function(){ 
    $(this).find('item').each(function(){ 
    var desc = $(this).find('description').text(); 
    console.log(desc); 
    }); 
}); 
} 
}); 

Répondre

2

essayez celui-ci .....

$(xml).find('channel').each(function(){ 
    $(this).find('item').each(function(){ 
     var desc = $(this).find('description').text(); 
     var newTag =document.createElement("div"); 
     newTag.innerHTML = desc; 
     var imgTag = newTag.getElementsByTagName("img"); 
    }); 
}); 
+0

@arkchong Avez-vous essayé ce code? – Vivek

+0

oui, je pense que cela fonctionne, mais disons que si j'ai plusieurs tag img à l'intérieur du contenu, comment puis-je obtenir le premier? – arkchong

+0

si vous avez plusieurs balises d'image, alors newTag.getElementsByTagName ("img"), retournera array .... donc juste itérer en utilisant loop, vous obtiendrez toutes les balises img ... et si vous avez des balises autres que img, alors vous pouvez obtenir ces étiquettes de la même manière que je l'ai fait pour img tag ..... s'il vous plaît accepter cette réponse si vous trouvez son travail pour vous ... Merci – Vivek

0

Il semble que le problème est dans cette ligne:

var desc = $(this).find('description').text(); 

Au lieu d'utiliser .text() à la fin de cette ligne, essayez .ht ml() et recherchez la balise que vous voulez:

var desc = $(this).find('description').html(); 
var theImageYouwant = desc.find('img'); 
+0

ne peut pas, il me renvoie une erreur. – arkchong

0

$(this).find("description"); vous ramènera un fragment XML enveloppé jquery.

En supposant que le contenu n'est pas encapsulé dans cdata, vous pouvez utiliser jquery traversal comme vous le feriez pour le html.

e.g. $(this).find("description").find("p").each(function() { // whatever }); 

Si elle est CDATA enveloppé, puis, malheureusement, jQuery ne supporte pas html() comme la fonction XML, mais vous pouvez déballer l'objet jquery et remballer alors la description noeud xml. Quelque chose comme ceci:

var content = $($(this).find("description")[0].nodeValue);