XML Datei einlesen
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
XML Datei einlesen
Hallo,
vieleicht kann mir jemand helfen?
Suche schon sehr lange und bisher vergebens.
Ich öffne mit ReadXMLFile(Doc, XMLDatei) eine XML Datei und alles ist gut.
Nun möchte ich aber eine XML-Datei aus dem Web 'http://undsoweiter/test.xml' laden was mir nicht gelingt.
Mit welchem Befehl (unit) kann ich das tun?
Gruß
hbr
vieleicht kann mir jemand helfen?
Suche schon sehr lange und bisher vergebens.
Ich öffne mit ReadXMLFile(Doc, XMLDatei) eine XML Datei und alles ist gut.
Nun möchte ich aber eine XML-Datei aus dem Web 'http://undsoweiter/test.xml' laden was mir nicht gelingt.
Mit welchem Befehl (unit) kann ich das tun?
Gruß
hbr
Re: XML Datei einlesen
Du kannst die Datei z.B. mit Synapse in einen MemoryStream laden (HttpGetBinary in unit httpsend) und dann an ReadXMLFile übergeben.
http://synapse.ararat.cz/
http://synapse.ararat.cz/
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: XML Datei einlesen
Danke,
Gruß
Gibt es keine Lazarus eigene Bordmittel um eine xml Datei im Web zu lesen?theo hat geschrieben:Du kannst die Datei z.B. mit Synapse in einen MemoryStream laden (HttpGetBinary in unit httpsend) und dann an ReadXMLFile übergeben.
http://synapse.ararat.cz/
Gruß
Re: XML Datei einlesen
Viel einfacher geht's nicht. Synapse ist quasi ein "Bordmittel".hbr hat geschrieben:Danke,
Gibt es keine Lazarus eigene Bordmittel um eine xml Datei im Web zu lesen?

- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2817
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: XML Datei einlesen
Wenn du wirklich das Herunterladen und Entpacken von Synapse scheust, dann kannst du auch den mitgelieferten TFPHttpClient benutzen. Hab ich noch nie mit gearbeitet, weil ich mit Synapse groß geworden bin und es sehr schätze. Aber funktionieren wird das wohl auch.hbr hat geschrieben:Gibt es keine Lazarus eigene Bordmittel um eine xml Datei im Web zu lesen?theo hat geschrieben:[...]
http://synapse.ararat.cz/
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: XML Datei einlesen
OK,
habe versucht mir das zu installieren, was bei mir nicht geht.
Komme mit der Datei "laz_synapse.lpk" nicht weiter, die Units werden nicht gefunden.
Muß man die in ein bestimtes Verzeichnis von Lazerus Kopieren?
Gruß
habe versucht mir das zu installieren, was bei mir nicht geht.
Komme mit der Datei "laz_synapse.lpk" nicht weiter, die Units werden nicht gefunden.
Muß man die in ein bestimtes Verzeichnis von Lazerus Kopieren?
Gruß
Re: XML Datei einlesen
Nein, es sind auch keine visuellen Komponenten.hbr hat geschrieben: Muß man die in ein bestimtes Verzeichnis von Lazerus Kopieren?
Du musst aber natürlich die Abhängigkeit von dem Package ins Projekt aufnehmen.
Projekt - > Projektinspektor -> Hinzufügen -> Neue Anforderung -> laz_synapse
Danach werden die Units in deinem Projekt gefunden.
Zuerst mal noch das lpk einmal öffnen und kompilieren im Package Menu.
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: XML Datei einlesen
Danke für eure Hilfe,
doch komme ich keinen Schritt weiter.
Weder mit ' httpsend ' noch mit ' TFPHttpClient '.
Zu ' httpsend '
Bei 'httpsend.HttpGetBinary(BaseURL, XmlInhalt);' kommt eine Fehlermeldung in der Unit ' httpsend '
Response.Seek(0, soFromBeginning);
Irgend wie finde ich zu beiden Units zu wenig Infos die mir weiterhelfen würde.
Gibt es vieleicht noch eine ander Idee?
Zu den Package:
Die Procedure
Projekt - > Projektinspektor -> Hinzufügen -> Neue Anforderung -> laz_synapse
mus bei jedem Projekt gemacht werden damit die Units erkannt werden. Ist das Normal ?
Bei Delphi wurden die nur einmal hinzugefügt.
Gruß
doch komme ich keinen Schritt weiter.
Weder mit ' httpsend ' noch mit ' TFPHttpClient '.
Zu ' httpsend '
Bei 'httpsend.HttpGetBinary(BaseURL, XmlInhalt);' kommt eine Fehlermeldung in der Unit ' httpsend '
Response.Seek(0, soFromBeginning);
Irgend wie finde ich zu beiden Units zu wenig Infos die mir weiterhelfen würde.
Gibt es vieleicht noch eine ander Idee?
Zu den Package:
Die Procedure
Projekt - > Projektinspektor -> Hinzufügen -> Neue Anforderung -> laz_synapse
mus bei jedem Projekt gemacht werden damit die Units erkannt werden. Ist das Normal ?
Bei Delphi wurden die nur einmal hinzugefügt.
Gruß
Re: XML Datei einlesen
Und wie lautet die? Und was ist XmlInhalt für ein Datentyp?hbr hat geschrieben: Zu ' httpsend '
Bei 'httpsend.HttpGetBinary(BaseURL, XmlInhalt);' kommt eine Fehlermeldung in der Unit ' httpsend '
Sei bitte ausführlich, sonst kann man dir nicht helfen.
Das ist was anderes als die Pfade bei Delphi.hbr hat geschrieben: Zu den Package:
Die Procedure
Projekt - > Projektinspektor -> Hinzufügen -> Neue Anforderung -> laz_synapse
mus bei jedem Projekt gemacht werden damit die Units erkannt werden. Ist das Normal ?
Bei Delphi wurden die nur einmal hinzugefügt.
Ja, das ist normal. Bei visuellen Komponenten geschieht das automatisch, bei nicht-visuellen manuell.
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: XML Datei einlesen
OK, Danke
Ich habe nun meinen Inhalt erst einmal in einem Memo.
Nun soll der XmlInhalt : TMemoryStream; wie Du sagtest an ReadXMLFile( Doc, ???URL) übergeben werden.
Aber wie?
Ich werte meine XML mit 'with Doc.DocumentElement.ChildNodes do Begin ..... aus.
Wie bekomme ich nun den Inhalt von TMemoryStream nach Doc.DocumentElement ????
Hier die übergabe ins Memo.
Gruß
Ich habe nun meinen Inhalt erst einmal in einem Memo.
Nun soll der XmlInhalt : TMemoryStream; wie Du sagtest an ReadXMLFile( Doc, ???URL) übergeben werden.
Aber wie?
Ich werte meine XML mit 'with Doc.DocumentElement.ChildNodes do Begin ..... aus.
Wie bekomme ich nun den Inhalt von TMemoryStream nach Doc.DocumentElement ????
Hier die übergabe ins Memo.
Code: Alles auswählen
try
XmlInhalt := TMemoryStream.Create;
httpsend.HttpGetBinary(BaseURL,XmlInhalt) ;
XmlInhalt.Seek(0,soFromBeginning);
Memo1.Lines.LoadFromStream(XmlInhalt);
ReadXMLFile(Documento,XmlInhalt);
finally
XmlInhalt.Free;
end;
Zuletzt geändert von Lori am Mi 20. Feb 2013, 20:20, insgesamt 1-mal geändert.
Grund: richtiger Highlighter
Grund: richtiger Highlighter
Re: XML Datei einlesen
Ich verstehe deine Frage nicht. Sei bitte etwas präziser.
Du lädst den Stream ja nach "Documento", nennst es in der Beschreibung aber wieder "Doc".
Wenn du so ungenau bist, versteht man dich nicht.
Du lädst den Stream ja nach "Documento", nennst es in der Beschreibung aber wieder "Doc".
Wenn du so ungenau bist, versteht man dich nicht.
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: XML Datei einlesen
Sorry,
der letzte Eintrag "ReadXMLFile(Documento,XmlInhalt);" war ein Versuch und funktioniert nicht.
Bei dem zweiten Wert von ReadXMLFile wird Type "String" Erwartet, also der Dateiname auf dem Lokalen Rechner.
XMLInhalt ist vom Type TMemoryStream
Meine Frage:!
Wie bekomme ich XMLInhalt(welches z.Z. in Memo ist > nach Documento(= Doc)) vom Typ TXMLDocument ?
Augewertet mird so!
Ist das so Verständlich, oder fehlt eine Info?
Es geht ja darum, wie oben erwähnt die XML-Datei aus dem Netz zu laden und auszuwerten.
Gruß
der letzte Eintrag "ReadXMLFile(Documento,XmlInhalt);" war ein Versuch und funktioniert nicht.
Bei dem zweiten Wert von ReadXMLFile wird Type "String" Erwartet, also der Dateiname auf dem Lokalen Rechner.
XMLInhalt ist vom Type TMemoryStream
Meine Frage:!
Wie bekomme ich XMLInhalt(welches z.Z. in Memo ist > nach Documento(= Doc)) vom Typ TXMLDocument ?
Augewertet mird so!
Code: Alles auswählen
var
Documento: TXMLDocument;
i, j: Integer;
begin
ReadXMLFile(Documento, 'C:\Programas\teste.xml');
Memo.Lines.Clear;
with Documento.DocumentElement.ChildNodes do
begin
for i := 0 to (Count - 1) do
begin
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].Attributes.Item[0].NodeValue);
for j := 0 to (Item[i].ChildNodes.Count - 1) do
begin
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '
+ Item[i].ChildNodes.Item[j].FirstChild.NodeValue);
end;
end;
end;
Documento.Free;
end;
Es geht ja darum, wie oben erwähnt die XML-Datei aus dem Netz zu laden und auszuwerten.
Gruß
Zuletzt geändert von Lori am Do 21. Feb 2013, 16:01, insgesamt 1-mal geändert.
Grund: richtiger Highlighter
Grund: richtiger Highlighter
Re: XML Datei einlesen
Ich weiss nicht, was du machst, damit das nicht funktioniert.hbr hat geschrieben:Sorry,
der letzte Eintrag "ReadXMLFile(Documento,XmlInhalt);" war ein Versuch und funktioniert nicht.
Bei dem zweiten Wert von ReadXMLFile wird Type "String" Erwartet, also der Dateiname auf dem Lokalen Rechner.
XMLInhalt ist vom Type TMemoryStream
Ist das so Verständlich, oder fehlt eine Info?
ReadXMLFile ist überladen und es gibt Varianten mit versch. Parametern.
Diese Variante nimmt doch einen TMemoryStream entgegen:
Code: Alles auswählen
procedure ReadXMLFile(out ADoc: TXMLDocument; f: TStream); overload;
-
- Beiträge: 321
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: XML Datei einlesen
Hallo Theo,
Danke ja,
wenn ich die Zeile Memo1. entferne läuft es.
Ansonsten gibt es eine Fehlermeldung!
Pojekt hat Exception-Klasse >>EXMLReadError<< ausgelöst mit der Meldung:
In 'stream:'(line1 pos 1): Root element is missing.
Bei Adresse 54CCED
Also Memo oder ReadXMLFile() aber nicht beide.
Wüste natürlich gerne woran das nun liegt!
Gruß
Danke ja,
wenn ich die Zeile Memo1. entferne läuft es.
Ansonsten gibt es eine Fehlermeldung!
Pojekt hat Exception-Klasse >>EXMLReadError<< ausgelöst mit der Meldung:
In 'stream:'(line1 pos 1): Root element is missing.
Bei Adresse 54CCED
Also Memo oder ReadXMLFile() aber nicht beide.
Wüste natürlich gerne woran das nun liegt!
Gruß
Re: XML Datei einlesen
Wahrsch. musst du jew. vorher den Stream zurücksetzen. Das hast du ja schon mal gemacht:
XmlInhalt.Seek(0,soFromBeginning);
oder
XmlInhalt.Position:=0;
XmlInhalt.Seek(0,soFromBeginning);
oder
XmlInhalt.Position:=0;