AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein An alle Programmierhengste: XML lesen
Thema durchsuchen
Ansicht
Themen-Optionen

An alle Programmierhengste: XML lesen

Ein Thema von golffahrer · begonnen am 5. Apr 2011 · letzter Beitrag vom 6. Apr 2011
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
golffahrer

Registriert seit: 5. Apr 2011
12 Beiträge
 
#1

An alle Programmierhengste: XML lesen

  Alt 5. Apr 2011, 14:37
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:
...
if n = 'infourlthen
                            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
...
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.
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.

Geändert von MrSpock ( 5. Apr 2011 um 15:40 Uhr)
  Mit Zitat antworten Zitat
roboter202

Registriert seit: 6. Mär 2011
98 Beiträge
 
Delphi 6 Professional
 
#2

AW: An alle Programmierhengste

  Alt 5. Apr 2011, 14:44
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) !
Christian
i := 0 ; While i = 0 do beep ;
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: An alle Programmierhengste

  Alt 5. Apr 2011, 15:06
Wenn man es mit XML zu tun hat sollte man auch einen XML-Parser zum auslesen nehmen.
Alles andere ist M....
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#4

AW: An alle Programmierhengste

  Alt 5. Apr 2011, 15:06
@roboter202:
Du meinst Die Tags [DELPHI] und [/DELPHI] ?!


@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? Gut, die könnte natürlich XHTML sein ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: An alle Programmierhengste

  Alt 5. Apr 2011, 15:13
Aber wie es aussieht holst du doch eine HTML-Seite, oder?
Stimmt, <body> hört sich nach HTML an. Dort nimmt man einen HTML-Parser wie TWebBrowser.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
golffahrer

Registriert seit: 5. Apr 2011
12 Beiträge
 
#6

AW: An alle Programmierhengste

  Alt 5. Apr 2011, 15:31
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!
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#7

AW: An alle Programmierhengste

  Alt 5. Apr 2011, 15:34
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.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
golffahrer

Registriert seit: 5. Apr 2011
12 Beiträge
 
#8

AW: An alle Programmierhengste

  Alt 5. Apr 2011, 15:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#9

AW: An alle Programmierhengste: XML lesen

  Alt 5. Apr 2011, 15:44
  1. Wo gibst du die TStringStreams wieder frei, die du erzeugst?
  2. Wieso kommt der Block if Pos('<BODY>', BodyJvRichEdit.text) <> 0 then zwei mal vor?
  3. Ein XML-Parser ist die bessere, einfachere und stabilere Wahl
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: An alle Programmierhengste: XML lesen

  Alt 5. Apr 2011, 15:52
Du solltest, glaube ich, Deinen code einmal kritisch überprüfen:
Delphi-Quellcode:
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;
..
Da scheint einiges redundant zu sein.
wie wäre es mit
Delphi-Quellcode:
Start:=Pos('<BODY>',uppercase(BodyJvRichEdit.text));
if Start>0 then ...
warum eigentlich ein Richedit? Eine Stringlist würde es doch auch tun?

Gruß
K-H

Edith:
Ich entnehme mir die Daten
aus den entsprechenden XML-Knoten und packe Sie in meine Datenbank..
Dann sollte man vielleicht doch einen Parser nutzen?

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.
Gewissheit könnte hier ein Debugger verschaffen

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 5. Apr 2011 um 15:56 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz