Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML: Fehler beim Einlesen eines XML Streams (https://www.delphipraxis.net/84720-xml-fehler-beim-einlesen-eines-xml-streams.html)

Klaus01 20. Jan 2007 17:09


XML: Fehler beim Einlesen eines XML Streams
 
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Abend,
mit dem folgenden Code lese ich XML Streams ein:
Delphi-Quellcode:
...
   if xmlStream.Size > 0 then
     begin

       XMLDocument1.LoadFromStream(xmlStream); // hier tritt das Problem auf.
       XMLDocument1.Active:=true;

         ANode:=XMLDocument1.DocumentElement.ChildNodes.FindNode('channel');

     //  with treeview1.Items.AddFirst(nil,ANode.ChildNodes['title'].Text) do
     //    selected:=true;

       StartItemNode:=XMLDocument1.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item');

       ANode:=StartItemNode;
       repeat
          //treeview1.Items.AddChild(treeview1.Selected,
          data.itemTitle:=getText(ANode.ChildNodes.FindNode('title'));
          data.itemUrl:=ANode.ChildNodes.FindNode('enclosure').Attributes['url'];
          data.itemLength:=StrToInt(ANode.ChildNodes.FindNode('enclosure').Attributes['length']);
          //Node.selectSingleNode("enclosure").ge
          TFeed(List[number]).addItem(data);
          ANode:=ANode.NextSibling;
       until ANode = nil;
     end;
   xmlDocument1.Active:=false;
   xmlStream.Free;
end;
wobei XMLDocument vom Typ TXMLDocument ist.

Normalerweise funktioniert der Code ohne Probleme, nur bei dieser XML Datei macht er Probleme.
Delphi gibt diese Fehlermeldung aus: EDOMParseError : 'An invalid character was found in text content.
<description> A preview of the coming'

Stolpert der Parser über die &amp; Tags im Text?

Nun ich könnte

XMLDocument1.LoadFromStream(xmlStream);
in try .. except einpacken.

Aber was mich interessiert, ist die Schreibweise mit &amp; im XML Text nicht XML konform oder
hat der Parser einen Bug?

Hier ein Auszug der XML Datei.

XML-Code:
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
   <channel>
      <title>Radio 1 Documentaries</title>
      <link>http://www.bbc.co.uk/radio1/documentaries/podcast.shtml</link>
      <description>Sex, drugs, UFOs, soldiers, saving the planet...have you got an opinion on these issues? Colin Murray has and the Radio 1 documentaries podcast will give you all the shizzle...what they think, what we think, and most importantly what YOU have to say. For more information and podcast terms of use go to www.bbc.co.uk/radio1</description>
      <itunes:author>BBC Radio 1</itunes:author>

      <itunes:owner>
         <itunes:name>BBC</itunes:name>
          <itunes:email>podcasting@bbc.co.uk</itunes:email>
      </itunes:owner>
      <language>en-gb</language>
      <ttl>720</ttl>
      
      <itunes:image href="http://www.bbc.co.uk/radio/downloadtrial/images/programmes/300x300/radio1_interviews.jpg"/>

      
      <copyright>(C) BBC 2006</copyright>
      <pubDate>Fri, 19 Jan 2007 16:43:52 +0000</pubDate>
      <itunes:category text="Music"/><itunes:category text="Health"/>
      
      <itunes:keywords>BBC,Radio1,Radio,Music,Sex,Drugs,Documentary</itunes:keywords>
      <itunes:explicit>No</itunes:explicit>
      
      <item>

         <title>Documentary: Film 07</title>
         <description>A preview of the coming year in film, with exclusive on set audio diary from the UK&#65533;s hottest film makers, Hammer &amp; Tongs, as they work on the follow up to their box office smash, Hitchhikers Guide To The Galaxy. Colin also chats film with Simon Pegg &amp; Nick Frost.</description>
         <itunes:subtitle>Documentary: Film 07</itunes:subtitle>
         <itunes:summary>A preview of the coming year in film, with exclusive on set audio diary from the UK&#65533;s hottest film makers, Hammer &amp; Tongs, as they work on the follow up to their box office smash, Hitchhikers Guide To The Galaxy. Colin also chats film with Simon Pegg &amp; Nick Frost.</itunes:summary>

         <pubDate>Fri, 19 Jan 2007 16:00:00 +0000</pubDate>
         <itunes:duration></itunes:duration>
         <guid isPermaLink="false">http://downloads.bbc.co.uk/rmhttp/downloadtrial/radio1/radio1documentaries/radio1documentaries_20070119-1600_40_pc.mp3</guid>
         <enclosure
            url="http://downloads.bbc.co.uk/rmhttp/downloadtrial/radio1/radio1documentaries/radio1documentaries_20070119-1600_40_pc.mp3"
            length="12570149"
            type="audio/mpeg"/>
         <media:content url="http://downloads.bbc.co.uk/rmhttp/downloadtrial/radio1/radio1documentaries/radio1documentaries_20070119-1600_40_pc.mp3"
            fileSize="12570149"
            type="audio/mpeg"
            expression="full"
            duration=""
            bitrate="40"/>
         
      </item>
Die Fehlermeldung und die XML Datei habe ich angehängt.
Wäre schön, wenn jemand etwas Licht in die Sache bringen könnte.

Grüße
Klaus

BUG 20. Jan 2007 17:52

Re: XML: Fehler beim Einlesen eines XML Streams
 
Er meckert über einen fehlerhaften Buchstaben,
vielleicht stört ihn das
Zitat:


nach dem "UK" in der XML-Datei ?!

marabu 20. Jan 2007 18:19

Re: XML: Fehler beim Einlesen eines XML Streams
 
Guten Abend Klaus,

wie hast du die entities in das Dokument hinein geschafft? Hast du das Dokument per WebBrowser abgeholt und dann gespeichert oder waren noch andere Programme beteiligt? &amp; gehört definitiv nicht hinein. (so ein Quatsch...)

Freundliche Grüße

Klaus01 20. Jan 2007 18:51

Re: XML: Fehler beim Einlesen eines XML Streams
 
Guten Abend Achim,

so hole ich die Daten ab:
Delphi-Quellcode:
   xmlStream:=TMemoryStream.Create;

   url:= TFeed(List[number]).feedURL;
   StatusBar1.Panels[0].Text:=url;
   if Url <> '' then
     begin
       try
         idhttp1.Get(url,xmlStream);
       except
         on E: Exception do
           begin
             WriteLog('http error while trying to get <'+url+'> : '+E.Message);
             xmlStream.Clear;
           end;
       end;
     end
     else
       WriteLog('http error, empty URL');
Das Beispiel, das ich im ersten Beitrag angehängt habe,
habe ich mit einem Browser (FF) gespeichert.
In einem Programm hole ich die XML Daten mit idhttp ab
und speichere Sie direkt in eine Stream.

Also könnte es sein, daß der Autor der XML Datei
das Fehler eingebaut hat?

Grüße
Klaus

Klaus01 20. Jan 2007 19:01

Re: XML: Fehler beim Einlesen eines XML Streams
 
Zitat:

Zitat von BUG
Er meckert über einen fehlerhaften Buchstaben,
vielleicht stört ihn das
Zitat:


nach dem "UK" in der XML-Datei ?!

Hallo BUG,

nun, wenn ich die XMLD atei mit dem IE aufmache,
dann mosert er über das Zeichen nach UK, das ein ? ist.

Mit dem FireFox wird die XML Datei angezeigt.

[edit1]
Ich habe mir nun einmal die XML Datei im Notepad anzeigen lassen.
Nach dem UK steht dort ein ´ Zeichen, wenn ich dieses austausche
wird die XML Datei auch richtig im IE angezeigt.
[/edit1]

Grüße
Klaus

marabu 20. Jan 2007 19:43

Re: XML: Fehler beim Einlesen eines XML Streams
 
Hallo Klaus,

die Standard-Entities sind natürlich kein Problem. Allerdings scheint mir der IE7 (habe momentan keinen anderen) Wert darauf zu legen, dass ein Dokument mit encoding UTF-8 auch mit einem entsprechenden byte-order-mark gespeichert wird. Nachdem ich das gemacht habe zeigt auch der IE7 keinen Fehler mehr an.

Freundliche Grüße

Klaus01 20. Jan 2007 20:15

Re: XML: Fehler beim Einlesen eines XML Streams
 
Zitat:

Zitat von marabu
Hallo Klaus,

die Standard-Entities sind natürlich kein Problem. Allerdings scheint mir der IE7 (habe momentan keinen anderen) Wert darauf zu legen, dass ein Dokument mit encoding UTF-8 auch mit einem entsprechenden byte-order-mark gespeichert wird. Nachdem ich das gemacht habe zeigt auch der IE7 keinen Fehler mehr an.

Freundliche Grüße

Hallo Achim,

wie setzt Du denn den byte-order-mark?
Aber laut den Specs für XML ist die byte-order-mark für UTF-8 doch optional?

Einen schönen Abend noch.
Grüße
Klaus

marabu 20. Jan 2007 20:25

Re: XML: Fehler beim Einlesen eines XML Streams
 
Habe einfach den Windows Editor benutzt - "Speichern unter" und dort kannst du dann die Zeichenkodierung wählen. Ich weiß auch nicht was mit dem IE7 los ist, aber er ist ja auch noch frisch. Außerdem testen wir ja nicht in der richtigen Umgebung, denn mir liegt das XML-Dokument nicht zuverlässig im Originalzustand vor - der feed ist wohl nicht mehr ganz aktuell und momentan sind bei BBC Radio One keine Ampersands zu sehen.

Dir auch noch einen schönen Abend.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz