![]() |
RSS-Feed einlesen
Hallo zusammen,
ich möchte aus folgenden RSS-Feed die "<item>" auslesen (Aufbau):
Delphi-Quellcode:
Ich habe mal mein gesamtes Grundgerüst angehängt, da ich den Fehler einfach nicht erkennen kann (habe mich an das XML-Tutorial gehalten):
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> <rss version="0.91"> <channel> <title>WarCry-Realm</title> <link>http://worker/warcry/</link> <description>WarCry-Realm :: Alles rund um das CCG</description> <language>de-de</language> <image> <title>WarCry-Realm</title> <url>http://worker/warcry/images/logo.jpg</url> <link>http://worker/warcry/</link> </image> <webMaster>Admin@warcry-realm.de</webMaster> <item> <title>Eindrücke und Bilder vom Games Day 2004</title> <link>http://worker/warcry/modules.php?op=modload&name=News&file=article&sid=72</link> <description>Auf der offiziellen Seite von Games-Workshop kann man sich ein paar Bilderchen vom diesjährigen Games Day anschauen. Auch der Sabertooth-Games Stand ist mit verewigt. </description> </item> <item> .... </item> </channel> </rss>
Delphi-Quellcode:
Bin für jeden Tip dankbar, da ich mit XML gerade anfange zu experimentieren.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, MSXML2_TLB, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; xmlDoc: IXMLDOMDocument2; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var myNodeList: IXMLDOMNodeList; subNode: IXMLDOMNode; strDummy: String; ix: Integer; begin xmlDoc := CoDOMDocument40.Create; xmlDoc.setProperty('NewParser', true); strDummy:=ExtractFilePath(Application.ExeName)+'backend.rss'; xmldoc.load(strDummy); myNodeList := xmldoc.documentElement.selectNodes('//channel/item'); <-- Access Violation for ix:=0 to myNodeList.length-1 do begin end; end; end. Gruß Igotcha |
Re: RSS-Feed einlesen
Bei obenstehenden XML fehlt das abschließende </rss> Tag, damit ist DocumentElement nil und Du erhälst die AV ;)
...:cat:... |
Re: RSS-Feed einlesen
Ups, sorry mein Fehler, habe nur die ersten Zeilen gepostet - ich ändere das oben.
|
Re: RSS-Feed einlesen
Dann ändere mal den Code wie folgend:
Code:
...:cat:...
[..]
begin xmlDoc := CoDOMDocument40.Create; xmlDoc.setProperty('NewParser', true); strDummy:=ExtractFilePath(Application.ExeName)+'backend.rss'; xmldoc.load(strDummy); [color=#2400ff]if xmldoc.parseError.errorCode <> 0 then begin ShowMessage(xmldoc.parseError.errorMessage); Exit; end; // einen PUNKT vor den "//" myNodeList := xmldoc.documentElement.selectNodes('.//channel/item');[/color] for ix:=0 to myNodeList.length-1 do begin end; end; |
Re: RSS-Feed einlesen
Delphi-Quellcode:
"Die DTD-Validierung wird bei der Verwendung von MXXML Writer oder der Option "New Parser" zum Erstellen eines DOMDocuments nicht unterstützt."
xmlDoc := CoDOMDocument40.Create;
xmlDoc.setProperty('NewParser', true); strDummy:=ExtractFilePath(Application.ExeName)+'backend.rss'; xmldoc.load(strDummy); if xmldoc.parseError.errorCode <> 0 then begin ShowMessage(xmldoc.parseError.reason); (xmldoc.parseError.errorMessage gibbet bei mir nicht) Exit; end; myNodeList := xmldoc.documentElement.selectNodes('.//channel/item'); for ix:=0 to myNodeList.length-1 do begin end; Mache ich
Delphi-Quellcode:
kommt es wieder zur AV.
xmlDoc.setProperty('NewParser', false);
Noch zur Info: D7, WinXP, aktuellen XML-Parser von Microsoft geladen gemäß Tutorial. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz