[C#]RSS met speciale tekens/html entities verwerken

Pagina: 1
Acties:
  • 575 views sinds 30-01-2008
  • Reageer

  • Arie-Kanarie
  • Registratie: Juli 2004
  • Laatst online: 21-06 13:40

Arie-Kanarie

Een keer wat anders

Topicstarter
Ik heb een programma(tje) gemaakt dat rssfeeds download naar een (xml) file, een x aantal berichten uitleest en hier een banner van maakt op te tonen op tvschermen.
Dit was allemaal vrij simpel en had het gauw aan de praat. Alleen dan komt nu de financiele telegraaf, http://www.dft.nl/?view=rss op het moment dat ik die ga verwerken krijg ik de foutmelding:
Verwijzing naar niet gedeclareerde entiteit, euro. Regel x, positie y

Dit komt omdat de telegraaf het nodig vind om niet € te gebruiken maar: € neerzet op regel x positie y. Voor de ë gebruiken ze ë etc. en dat gaat natuurlijk ook fout.
Het eerste stukje van de xmlfile ziet er zo uit:
XML:
1
2
3
<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
<channel>


en de berichten zijn als volgt:
XML:
1
2
3
4
5
6
7
<item>
    <title>ProFibrix haalt &euro;8,5 miljoen op in financieringsronde</title>
    <link>http://www.dft.nl/nieuws/1393564/ProFibrix_haalt__euro_8_5_miljoen_op_in_financieringsronde.html?cid=rss</link>
    <description>ProFibrix haalt &euro;8,5 miljoen op in financieringsronde</description>
    <pubDate>Mon, 26 Mar 2007 09:10:00 CEST</pubDate>
    <guid>http://www.dft.nl/nieuws/1393564/ProFibrix_haalt__euro_8_5_miljoen_op_in_financieringsronde.html</guid>
</item>


Het gaat fout op dit stukje C#
C#:
1
XPathDocument doc = new XPathDocument(padnaarmnxml);


Dus ik dacht, dan zal mn C# wel niet goed zijn, en moet ik maar iets anders zoeken om ook compatible te zijn met de televaag. Na was gegoogle kwam ik onderstaande tegen:
C#:
1
2
3
4
5
6
XmlTextReader xmlTextReader = new XmlTextReader(filename);
XmlValidatingReader xmlValidatingReader = new XmlValidatingReader(xmlTextReader);
xmlValidatingReader.ValidationType = ValidationType.None;

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlTextReader);

Maar dit blijkt ook niet te werken, zelfde foutmelding op de laatste regel (xmlDoc.Load).

Doet de televaag iets fout door het gebruik van die entiteiten of moet ik een (heel) andere oplossing gaan coden (bv. met streamreader oid regel voor regel uitlezen en kijken of het een item is)?
Niet dat ik daar te beroerd voor ben, maar dat kost tijd en dan moet ik even afwegen hoeveel tijd we nog kwijt willen zijn.

Tis in .NET 1.1, misschien handig om te weten

[ Voor 1% gewijzigd door RobIII op 27-03-2007 10:48 . Reden: Entiteiten escaped :Y) ]

Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:55

crisp

Devver

Pixelated

Doet de televaag iets fout door het gebruik van die entiteiten [...]
Ja, named entiteiten buiten &amp; &lt; &gt; en &quot; zijn standaard in XML niet gedefinieerd en een parser kan daar dus een error op geven (niet alle parsers doen dat overigens, vooral specifieke RSS-parser zijn vrij linient). Ze moeten dus numerieke entiteiten gebruiken of gewoon de feed als UTF-8 versturen en dan het gewone karakter gebruiken. Op deze manier is het gewoon een invalid feed (en helaas gebeurd dat vaker - mensen snappen XML niet).

Validating vs non-validating heeft volgens mij meer te maken met of de parser het document strict checked tegen een DTD; dat is hier niet aan de orde.

[ Voor 21% gewijzigd door crisp op 27-03-2007 10:17 ]

Intentionally left blank


  • Arie-Kanarie
  • Registratie: Juli 2004
  • Laatst online: 21-06 13:40

Arie-Kanarie

Een keer wat anders

Topicstarter
crisp schreef op dinsdag 27 maart 2007 @ 10:11:
[...]

Ja, named entiteiten buiten &amp; &lt; &gt; en &quot; zijn standaard in XML niet gedefinieerd en een parser kan daar dus een error op geven (niet alle parsers doen dat overigens). Ze moeten dus numerieke entiteiten gebruiken of gewoon de feed als UTF-8 versturen en dan het gewone karakter gebruiken. Op deze manier is het gewoon een invalid feed (en helaas gebeurd dat vaker - mensen snappen XML niet).

Validating vs non-validating heeft volgens mij meer te maken met of de parser het document strict checked tegen een DTD; dat is hier niet aan de orde.
Oke dank u, dat scheelt weer ligt dus niet aan mij.
Mocht ik dus tijd over hebben dan kan ik gaan proberen mn progsel ook geschikt te maken voor invalid feeds.

Dat van dat validating klopt, kan je oa. kiezen uit DTD of schema, maar dat is inderdaad niet echt aan de orde als je het mij vraagt.

Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier


  • Teunis
  • Registratie: December 2001
  • Laatst online: 14-11 21:13
beetje rond probleem heen gaan, maar je eigen replace functie loslaten voordat je xml praser in gaat is een optie

Please nerf Rock, Paper is fine. Sincerely yours, Scissor.
GW2:Teunis.6427