![]() |
XML online auslesen
Guten Tag alle zusammen!
Mein Anliegen besteht darin, eine XML Datei, welche online existiert auszulesen. Besser gesagt einen bestimmten Text. Die XML sieht ungefähr so aus:
XML-Code:
Nun würde ich gern in dieser XML nach dem String "Bella" suchen. Beziehungsweise überprüfen ob er überhaupt existiert.
<film>
<jahr>2009</jahr> <name>Knowing</name> </film> <film> <jahr>2008</jahr> <name>Bella</name> </film> Dazu muss ich doch bestimmt per IdHTTP die Datei runterladen. Ich weiß, wie ich navigiere. Aber nicht wie ichs als Datei speichere. Oder lohnt sich das überhaupt? Sollte man das überhaupt abspeichern? Ich bitte um eure Mithilfe =) Vielen Dank! [edit=mkinzler]XML-Tag eingefügt Mfg, mkinzler[/edit] |
Re: XML online auslesen
Du kannst per idhttp Den Text in einem String speichern, und dann darin suchen - erst runterladen um sie dann von der festplatte zu öffnen ist nicht nötig ;)
P.S. Schau dir mal den Rückgabewert von IdHTTP.Get an ... |
Re: XML online auslesen
Hallo,
das ist eigentlich ganz einfach, wie eben mit allem was bekannt ist. Du kannst dazu den in Delphi vorhandenen XML Server verwenden (Komponente) oder wie ich gerne selbst den XML DOM von Microsoft laden. Dazu must du in Delphi nur zuerst die XML TypeLibrary importieren (ist bei jeder Delphi Version anders, bei D2007 z.B.: Komponenten => Komponente importieren... => Typbibliothek importieren). Die liegt dann im Delphi import Pfad. uses der TypeLibrary anmelden...
Delphi-Quellcode:
kleine function schreiben...
uses
MSXML2_TLB, ... Parameter ist Pfad und Dateiname oder direkt übers Netz eine URL
Delphi-Quellcode:
[edit=mkinzler]Delphi-Tags eingefügt Mfg, mkinzler[/edit]
procedure LoadXML(FURL:String);
var Doc: DOMDocument30; DomList: IXMLDOMNodeList; PNode:IXMLDOMNode; n,i,Count:Integer; s,Topic,Item:String; DeviceObj:TDeviceObj; begin try //create document Doc := CreateOleObject('Msxml2.DOMDocument.3.0') as DOMDocument30; Doc.async := False; Doc.resolveExternals := False; //load Count:=0; repeat inc(count); LoadResult:=Doc.load(FURL); if NOT LoadResult then begin sleep(20*Count); end; until (LoadResult OR (Count>=3)); finally if LoadResult then begin try DomList:=Doc.getElementsByTagName('name'); for n:=0 to DomList.length-1 do begin s:=DomList[n].NodeName s:=(DomList[n] as IXMLDOMElement).getAttribute('Darsteller'); end; //close xml doc Doc := nil; except on E:Exception do ShowMessage('Execption at load/read XML:'+E.Message); end; end; end; end; |
Re: XML online auslesen
Such mal hier im Forum nach HimXML oder nach der XMLLib von Muetze1.
|
Re: XML online auslesen
Problem ist erstmal gelöst mittels TIdHTTP.Get() und AnsiContainsText() ;)
|
Re: XML online auslesen
Dein Problem lässt sich mit einem XPATH Ausdruck lösen:
XML-Code:
Das bedeutet: suche alle Elemente <film> die ein Element <name> mit dem Inhalt Bella haben.
//film[name='Bella']
Wenn dich ein Vendor-Lockin auf Microsoft nicht stört, dann kannst du mit MSXML alle Teilaufgaben erschlagen. * Herunterladen der XML-Daten unter Beachtung der Proxy-Einstellungen * Parsen und Suchen in den XML-Daten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 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