![]() |
An alle Programmierhengste: XML lesen
Hallo Freunde,
ich bin neu hier und habe folgendes Problem. Ich ziehe mir Daten via XML vom Server eines Lieferanten. Mein Code sieht folgender Maßnahmen aus:
Delphi-Quellcode:
Ich vermute mal, dass er mit der Datenmenge nicht zurecht kommt. Dies ist nur bei einem Artikel so. Der einzige Unterschied ist nur der Textstream. Der hat ein paar Zeichen mehr.
...
if n = 'infourl' then begin PostDataStream := TStringStream.Create(''); ParamData := TStringStream.Create(''); ParamData.WriteString(''); ArtikelAdsTable.FieldByName('Infourl').AsString := s; HtmlCodeIdHTTP.Post(s, ParamData, PostDataStream); ArtikelAdsTable.FieldByName('Infotextalles').AsString := PostDataStream.DataString; BodyJvRichEdit.Clear; BodyJvRichEdit.Text := PostDataStream.DataString; if Pos('<BODY>', BodyJvRichEdit.text) <> 0 then begin Start := Pos('<BODY>', BodyJvRichEdit.text)+7; Ende := Pos('</BODY>', BodyJvRichEdit.text); Body := Ende - Start; bodytext := copy(BodyJvRichEdit.text, Pos('<BODY>', BodyJvRichEdit.Text)+6, Body+1); ArtikelAdsTable.FieldByName('Infotextbody').AsString := bodytext; end; if Pos('<body>', BodyJvRichEdit.text) <> 0 then begin Start := Pos('<body>', BodyJvRichEdit.text)+7; Ende := Pos('</body>', BodyJvRichEdit.text); Body := Ende - Start; bodytext := copy(BodyJvRichEdit.text, Pos('<body>', BodyJvRichEdit.text)+6, Body+1); ArtikelAdsTable.FieldByName('Infotextbody').AsString := bodytext; end; end ... ReceiverBufferSize wurde auf 1000000 gesetzt. Hat jemand eine Idee, warum er gerade bei einem Artikel ins Essen bricht und das Programm ohne einer Exception killt!? Über Eure Antworten, wäre ich sehr dankbar. |
AW: An alle Programmierhengste
Hall
Willkommen in der DP. Kann deine Frage zwar LEIDER nicht :( beantworten. Aber am besten Packst du deinen Code beim nächsten mal in die Code / DELPHI tags Einfach mit DELPHI und /DELPHI oder CODE und /CODE einkalmmer (diese Wörter noch mit [ und ] einklammern) ! |
AW: An alle Programmierhengste
Wenn man es mit XML zu tun hat sollte man auch einen XML-Parser zum auslesen nehmen.
Alles andere ist M.... |
AW: An alle Programmierhengste
@roboter202:
Du meinst Die Tags [DELPHI] und [/DELPHI] ?! :-D @golffahrer: Wie du holst die Daten VIA XML? XML ist kein Datenprotokoll, du könntest also höchstens Daten holen, die im XML-Format vorliegen. Aber wie es aussieht holst du doch eine HTML-Seite, oder? :stupid: Gut, die könnte natürlich XHTML sein ... |
AW: An alle Programmierhengste
Zitat:
|
AW: An alle Programmierhengste
Die Frage ist ja, was an meinem Code falsch ist. Es funktioniert ja. Nur bei einem Artikel verabschiedet sich das Tool. Eine Datenbegrenzung kann ja nicht die Ursache sein, oder!?
Was genau für Infos braucht Ihr, damit wir das Problem lösen können!? P.S.: Viele Wegen führen nach Rom! :-) |
AW: An alle Programmierhengste
Erst einmal wäre es sehr nett von dir, wenn du deinen Code in die Tags [DELPHI] und [/DELPHI] verpackst, damit man ihn auch besser lesen kann. Danke.
Und dann darfst du auch gerne mal verraten, in welchem Format die Daten denn nun vorliegen. |
AW: An alle Programmierhengste
Also, ich sende einen Befehl zum Server des Lieferanten, dann bekomme ich XML zurück. Ich entnehme mir die Daten
aus den entsprechenden XML-Knoten und packe Sie in meine Datenbank. Wie gesagt, es funktioniert alles nur bei einem Produkt hängt er sich auf und macht nicht mehr weiter. Ich denke es liegt an dem etwas längerem Datenblatt. Das ist der einzige Unterschied. |
AW: An alle Programmierhengste: XML lesen
|
AW: An alle Programmierhengste: XML lesen
Du solltest, glaube ich, Deinen code einmal kritisch überprüfen:
Delphi-Quellcode:
Da scheint einiges redundant zu sein.
BodyJvRichEdit.Text := PostDataStream.DataString;
if Pos('<BODY>', BodyJvRichEdit.text) <> 0 then begin Start := Pos('<BODY>', BodyJvRichEdit.text)+7; Ende := Pos('</BODY>', BodyJvRichEdit.text); Body := Ende - Start; bodytext := copy(BodyJvRichEdit.text, Pos('<BODY>', BodyJvRichEdit.Text)+6, Body+1); ArtikelAdsTable.FieldByName('Infotextbody').AsStri ng := bodytext; end; if Pos('<body>', BodyJvRichEdit.text) <> 0 then begin Start := Pos('<body>', BodyJvRichEdit.text)+7; Ende := Pos('</body>', BodyJvRichEdit.text); Body := Ende - Start; .. wie wäre es mit
Delphi-Quellcode:
warum eigentlich ein Richedit? Eine Stringlist würde es doch auch tun?
Start:=Pos('<BODY>',uppercase(BodyJvRichEdit.text));
if Start>0 then ... Gruß K-H Edith: Zitat:
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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 by Thomas Breitkreuz