2009-11-10 3 views
0

J'essaye d'analyser RSS chaanal avec simple-rss lib.Suppression d'entités XML d'une chaîne dans Ruby

Malheureusement j'ai eu beaucoup de déchets dans le nœud:

<description>&lt;p&gt; 
some decryption 

&lt;/p&gt; 
&lt;a href="http://url.com/trac/xxx/wiki/foo?action=diff&amp;amp;version=28"&gt;(diff)&lt;/a&gt;</description> 

J'ai besoin de récupérer du texte (« une description ») et éventuellement URL.

Quelle est la meilleure façon de le faire? Regexp (si c'est une réponse, pourriez-vous me donner un exemple, s'il vous plaît?)?

Répondre

3

Ce n'est pas une poubelle. C'est juste une chaîne de caractères aseptisée HTML. Et je suppose par l'URL, vous voulez dire avec les balises html (<a></a>). Le code suivant devrait fonctionner.

require 'cgi' 
description = "&lt;/p&gt; &lt;a href=\"http://url.com/trac/xxx/wiki/foo?action=diff&amp;amp;version=28\"&gt;(diff)&lt;/a&gt;" 
CGI.unescapeHTML(description) # => </p> <a href="http://url.com/trac/xxx/wiki/foo?action=diff&amp;version=28">(diff)</a> 

Si vous ne voulez pas les balises html, il existe différentes façons d'obtenir l'URL. Une simple regex pour l'url devrait fonctionner, ce que je vous laisse à comprendre. (Indice - Google)

+0

Merci "CGI.unescapeHTML (description)" est exactement ce que je cherchais. Une question supplémentaire, quoi de mieux pour récupérer http://url.com/trac/xxx/wiki/foo?action=diff & version = 28 regexp ou parser DOM? –

+0

Tout ce qui répond à vos besoins. Dépend de la taille du fichier XML. Si c'est trop énorme, je suggère d'utiliser les deux collectivement. Utilisez l'analyseur XML pour affiner le nœud dont vous voulez extraire l'URL, puis utilisez regex. Mais encore une fois, tout ce qui convient à vos besoins. – Chirantan