Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi RSS-Feed einlesen (https://www.delphipraxis.net/29662-rss-feed-einlesen.html)

Igotcha 12. Sep 2004 19:45


RSS-Feed einlesen
 
Hallo zusammen,

ich möchte aus folgenden RSS-Feed die "<item>" auslesen (Aufbau):

Delphi-Quellcode:
<?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&amp;name=News&amp;file=article&amp;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>
Ich habe mal mein gesamtes Grundgerüst angehängt, da ich den Fehler einfach nicht erkennen kann (habe mich an das XML-Tutorial gehalten):

Delphi-Quellcode:
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.
Bin für jeden Tip dankbar, da ich mit XML gerade anfange zu experimentieren.

Gruß Igotcha

sakura 12. Sep 2004 19:52

Re: RSS-Feed einlesen
 
Bei obenstehenden XML fehlt das abschließende </rss> Tag, damit ist DocumentElement nil und Du erhälst die AV ;)

...:cat:...

Igotcha 12. Sep 2004 19:53

Re: RSS-Feed einlesen
 
Ups, sorry mein Fehler, habe nur die ersten Zeilen gepostet - ich ändere das oben.

sakura 12. Sep 2004 19:58

Re: RSS-Feed einlesen
 
Dann ändere mal den Code wie folgend:

Code:
[..]
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;
...:cat:...

Igotcha 12. Sep 2004 20:03

Re: RSS-Feed einlesen
 
Delphi-Quellcode:
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;
"Die DTD-Validierung wird bei der Verwendung von MXXML Writer oder der Option "New Parser" zum Erstellen eines DOMDocuments nicht unterstützt."

Mache ich

Delphi-Quellcode:
 xmlDoc.setProperty('NewParser', false);
kommt es wieder zur AV.

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