AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

XML parsen, aber wie

Ein Thema von stifflersmom · begonnen am 29. Mär 2017 · letzter Beitrag vom 2. Jul 2021
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.015 Beiträge
 
Delphi 12 Athens
 
#11

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 11:25
Warum versuchen eigentlich ständig Alle auf Biegen und Brechen nicht das zu verwenden, was dafür gedacht ist?
http://stackoverflow.com/questions/3...p-xml-response
http://www.office-loesung.de/ftopic312578_0_0_asc.php
http://howtoprogram.eu/question/n-a,55664

Bei einer XML auf die Idee zu kommen das mit sonstwas zu parsen ... braucht nur mal die Quelle die XML anders zu Formatieren und schon knallt es, obwohl sich am Inhalt garnichts ändert.
Gut, wer krank ist, der kann statt des fehleranfälligen Pos/Copy-Codes es mit einem etwas weniger fehleranfälligen RegEx versuchen.

Aber, auch wenn die Anwort eine XML ist, so ist das ganze eigentlich nur die Rückantwort eines Remote-Procedure-Call
Dokumentation: http://evatr.bff-online.de/eVatR/xmlrpc/
Beispiel: http://evatr.bff-online.de/evatrRPC?...trasse=&Druck=

Bei Google suchenDelphi XML RPC
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Mär 2017 um 13:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 11:51
Nu komm mal runter.
Wer arbeitet sich in die Feinheiten von XML ein nur weil alle Jubeljahre mal (zuverlässig) eine Datei vorbei kommt. Insbesondere wenn die notorischen Besserwisser einem im Genick sitzen "das ist doch auch nur eine Textdatei, warum brauchen Sie dann so lange?"

Gruß
K-H

P.S.
Dank für die vielen Links, da ist die Mittagspause gerettet.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 15:12
Hallo,
Zitat:
Bei einer XML auf die Idee zu kommen das mit sonstwas zu parsen ... braucht nur mal die Quelle die XML anders zu Formatieren und schon knallt es
wenn in einer Xml, die ich selber schreibe, ich das Vorhandensein eines bestimmten Strings feststellen will,
nehme ich eine StringList und Pos, warum auch nicht?
Wenn's funktioniert?

Das war jetzt hier als Bsp., und nicht für die Xml des TE, die kommt ja aus der "Fremde".
Heiko
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#14

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 15:31
'ne abgewandelte Version für die, die Angst um veränderte Zeilenumbrüche haben:
Delphi-Quellcode:
var
  sl : TStringList;
  s : String;
  i : Integer;
  sErrorCode : String;

begin
...
  Try
     idHttp1 := TIdHTTP.Create;
     sl := TStringList.Create;
     Screen.Cursor := crHourGlass;
    try
      s := IdHTTP1.Get(sUrlLong);
      IdHTTP1.Disconnect(True);
      // Tags werden vom Inhalt getrennt, indem sie je Tag in eine Zeile kommen
      s := AnsiReplaceText(s,'<',#13#10 + '<');
      s := AnsiReplaceText(s,'>','>' + #13#10);
      sl.Text := s;
      // Tags brauchen wir nicht, ebensowenig wie Leerzeilen.
      for i := sl.Count - 1 downto 0 do begin
        if (Copy(sl[i],1,1) = '<')
        or (sl[i] = '') then sl.Delete(i);
      end;
      i := sl.IndexOf('ErrorCode');
      if i > -1 then sErrorCode := sl[i + 1];
    except on E: EIdException Do
      FormMain.add_info('UST Abfrage gescheitert ' + E.Message);
    end;
   Finally
     sl.Free;
     idHttp1.Free;
     Screen.Cursor := crDefault;
   End;
Und nun haben wir im Wechesel jeweil Beschreibung und den Text dazu.

Damit könnte man dann mit wenig Aufwand auch alles in 'ne Datenbank übernehmen.

Und ja, es geht auch mit 'nem XML-Parser.

Geändert von nahpets (29. Mär 2017 um 16:34 Uhr) Grund: Syntafehler behoben, siehe Post von Bra
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#15

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 15:41
Die Abfrage klingt irgendwie falsch:

Delphi-Quellcode:
      // Tags brauchen wir nicht, ebensowenig wie Leerzeilen.
      for i := sl.Count - 1 downto 0 do begin
        if (Copy(sl[i],1,1) = '<')
        or (Copy(sl[i],1,1) = '<')
        or (sl[i] = '') then sl.Delete(i);
      end;
Außerdem werden da auch die Endtags (/>) nicht berücksichtigt.

Ich würde auch einen XML-Parser nehmen. Ist initial zwar mehr Aufwand, aber wenn die Formatierung mal eine andere ist, funktioniert es noch.

Bei den ganzen Stringreplaces muss nur einmal anstatt <tag></tag> nur ein <tag /> stehen und es geht möglicherweise schon gar nicht mehr.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#16

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 16:34
Oh, da war ein Schreibfehler drinne, muss latürnich
Delphi-Quellcode:
 // Tags brauchen wir nicht, ebensowenig wie Leerzeilen.
      for i := sl.Count - 1 downto 0 do begin
        if (Copy(sl[i],1,1) = '<')
        or (sl[i] = '') then sl.Delete(i);
      end;
heißen.

Alle Zeilen, die mit 'nem < beginnen, fliegen raus, ebenso alle Leerzeilen.

Endetags mussen hier nicht separat berücksichtigt werden, weil sie im XML, um das es hier geht, nicht vorkommen.

Wir haben hier immer mehr oder weniger viele öffnende Tags.
Dann den Inhalt.
Dann die entsprechende Anzahl schließender Tags.

Wenn nun vor die < und hinter die > jeweils ein Zeilenumbruch eingefügt wird, dann sind alle Tags separiert.

Sie und die ggfls. entstehenden Leerzeilen fliegen raus und übrig bleibt der Inhalt.

Natürlich ist das nicht auf beliebige XML-Dateien anwendbar, aber danach war auch nicht gefragt.

Das "Schöne" an dieser Vorgehensweise:

Sie funktioniert auch noch dann, wenn man fehlerhaftes XML bekommt, bei dem "richtige" Parser zu Recht streiken.

Mit dieser Vorgehensweise funktioniert seit Jahren meine Suchmaschine für HTML-Seiten. Es ist wurscht, ob die Seiten gültiges HTML enthalten und von Browsern/Parsern richtig oder näherungsweise interpretiert werden können.

Als Ergbenis erhalte ich immer ausschließlich den Text der Seiten und kann ihn, nach entsprechender Weiterverarbeitung, in den Suchindex eintragen.

Geändert von nahpets (29. Mär 2017 um 16:45 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 16:36
Hallo,
also, wenn das Format der Datei verschieden sein kann,
ist die Benutzung von TStringList falscher als ein Xlm-Parser.

Wer weiss, was die da alles machen, dass bekommt man mit TStringList gar nicht alles hin (unter Umständen).
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.275 Beiträge
 
Delphi 12 Athens
 
#18

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 17:21
Moin...

Ich wollte mich eigentlich heraushalten.

Was habt ihr gegen einen XML Parser? ( ausgenommen die die das auch vorgeschlagen haben) Es gibt nicht nur die mit dem Overhead von TXMLDocument...

Beispiel (mit himXML):
Delphi-Quellcode:
uses
  himXML;
...
XML: TXMLFile;
...
XML := TXMLFile.Create;
...
XML.LoadFromFile(FFileName); //XML.LoadFromStream(Stream);
ErrorString := XML.Node['Errors'].Node['ErrorCode'].Text_S; // Beispiele für Node Bezeichnungen :-)
...fertsch.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 17:42
Hallo,
nicht wenn das so aussieht

<value><string>ErrorCode</string></value>
<value><string>200</string></value>
<value><string>300</string></value>
</data></array></value>

Oder müsste das nicht so aussehen?

<value><array><data>
<value><string>ErrorCode</string></value>
<value><string>200</string></value>
<value><string>ErrorCode</string></value>
<value><string>300</string></value>
</data></array></value

?
Heiko
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#20

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 18:35
Es gibt in einer Antwort des Servers nur einen ErrorCode, nämlich den zu den abgefragten Daten.

Ein Satz kann immer nur einen Fehlercode enthalten sein.

Hier jetzt Probleme zu lösen, die nur dann auftreten, wenn man eine nicht der Spezifikation entsprechende Antwort bekommt, halte ich für übertrieben.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:05 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