2009-03-10 10 views
2

J'ai un flux RSS que je veux modifier sur fly, tout ce dont j'ai besoin est le texte (et les sauts de ligne) tout le reste doit être supprimé (Toutes les images, styles, liens)Supprimer toutes les balises HTML et le formatage (RegEx)

Comment puis-je faire cela facilement avec ASP.NET C#

+0

Que nettoyez-vous? Le XML lui-même qui vient du flux RSS? Ou seulement le contenu HTML d'une entrée de flux individuelle? – teedyay

+0

Nettoyage juste HTML (champ Description de RSS) avec quelques liens IMG – Tom

+0

Dans ce cas, je maintiens ma réponse ci-dessous :-) – teedyay

Répondre

5

Regex ne peut pas analyser XML. N'utilisez pas regex pour analyser XML. Ne pas passer Go. Ne pas collecter 200 £.

Vous avez besoin d'un analyseur XML approprié. Chargez le RSS dans un XMLDocument, puis utilisez innerText pour obtenir uniquement du contenu textuel.

Notez que même lorsque vous avez extrait le contenu de la description de RSS, il peut contenir du code HTML actif. C'est:

<description> &lt;em&gt;Fish&lt;/em&gt; &amp;amp; chips </description> 

peut, lorsque analysé correctement en XML puis lire sous forme de texte vous donner soit la chaîne littérale:

<em>Fish</em> &amp; chips 

ou, le balisage:

Poisson & puces

La chose amusante à propos de RSS est que vous ne savez pas vraiment ce qui est juste. Dans RSS 2.0, il s'agit explicitement d'un balisage HTML (le second cas); dans d'autres versions, ce n'est pas spécifié. Généralement, vous devez supposer que les descriptions peuvent contenir des balises HTML codées par une entité, et si vous souhaitez les supprimer du texte final, vous devrez effectuer une seconde étape d'analyse. Malheureusement, comme il s'agit d'un code HTML hérité et non d'un XML, il est plus difficile à analyser, une regex sera encore plus inutile que pour l'analyse syntaxique XML, mais il n'y a pas d'analyseur HTML intégré dans .NET. sont des bibliothèques tierces telles que HTML Agility Pack.)

+0

+1 La seule réponse qui a du sens jusqu'ici et qui est downvoted ... –

+0

La guerre de la culture regex fait rage! – bobince

0
string pattern = @"<(.|\n)*?>"; 
return Regex.Replace(htmlString, pattern, string.Empty); 
+0

Echoue pour les attributs avec '>' en valeur, commentaires, PI, etc. – bobince

0

attention - vous ne voulez pas supposer que le code HTML que vous recevez est bien formé:

public static string ClearHTMLTagsFromString(string htmlString) 
{ 
    string regEx = @"\<[^\<\>]*\>"; 
    string tagless = Regex.Replace(htmlString, regEx, string.Empty); 

    // remove rogue leftovers 
    tagless = tagless.Replace("<", string.Empty).Replace(">", string.Empty); 

    return tagless; 
} 
0

Je l'ai fait en JavaScript pour un projet à peu près le même comme ci-dessus:

var thisText = ''; 
thisText = document.getElementById('textToStrip').value; 
var re = new RegExp('<(.|\\n)*?>', 'igm'); 
thisText = thisText.replace(re, ''); 
Questions connexes