2010-11-09 16 views
2

Je consomme un flux RSS et le document contient un caractère spécial »chargement d'un document xml échoue avec caractère spécial »

Je devine que l'alimentation n'est pas codé correctement, mais je ne peux pas changer cela. Je voudrais remplacer cela ou simplement remplacer l'ombreur offensant par quelque chose d'amical.

using (Stream stream = response.GetResponseStream()) 
     { 

      using (XmlReader reader = XmlReader.Create(stream)) 
      { 
       try 
       { 
        XmlDocument xmlDoc = new XmlDocument(); 
        xmlDoc.Load(reader); //<--- FAILS HERE 
        //parse the items of the feed 

...

+0

Vous pouvez consulter ce message [http://stackoverflow.com/questions/700686/an-error-occurred-while-parsing-entityname](http://stackoverflow.com/questions/700686/an-error-happened-while-parsing-entityname) –

Répondre

6

&raquo; est un HTML named entity et est pas pris en charge XML. De la boîte, XML only supports&amp;, &apos;, &quot;, &gt; et &lt;.

Utilisez à la place l'entité numérique correspondante &#187; (ou hexadécimal &#xbb;).

1

+1 ce que Frédéric a dit. Vous pouvez également utiliser » comme caractère brut non échappé, vraisemblablement encodé en UTF-8.

S'il s'agit du flux RSS de quelqu'un d'autre, vous devez le relancer pour arrêter de produire du code XML mal formé; aucun analyseur XML lira ceci.

Dans un élément <description>, le contenu HTML devrait normalement être protégé par XML. Donc, si la description de l'article est This is a <em>really</em> interesting article, il doit apparaître dans le fichier XML comme:

<description>This is a &lt;em>really&lt;/em> interesting article</description> 

Par conséquent, un caractère » HTML codé aurait dû sortir comme

&amp;raquo; 

S'il a été inclus directement à partir d'une source HTML sans être échappé, c'est un problème d'injection XML plus grave.

(Dans les différentes versions précédentes de RSS, si le <description> contenait du HTML ou du texte brut variait d'une spécification à l'autre et était parfois complètement non spécifié.Pour les anciennes versions de RSS, il n'est pas vraiment fiable d'utiliser du contenu HTML à tout.)

+0

Je suppose que nous devrions lancer Google pour pomper RSS 2 avec ces problèmes puis: http://feeds.feedburner.com/robinsloan – Nariman