AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML parsen, aber wie

Ein Thema von stifflersmom · begonnen am 29. Mär 2017 · letzter Beitrag vom 2. Jul 2021
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#1

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 07:39
Ich hab sowas Ähnliches mit OmniXML und XPath gelöst. Um z.B. aus einer *.groupproj-Datei zu lesen:
Delphi-Quellcode:
function GroupProj_ReadProjects(const AGroupProjName: string; ADProjNames: TStrings): Boolean;
var
  Doc: IXMLDocument;
  Root: IXMLElement;
  CallTargetNode, ProjectNode: IXMLNode;
  Targets: string;
begin
  Doc := CreateXMLDoc;
  Doc.PreserveWhiteSpace := False;

  if not Doc.Load(AGroupProjName) then
    Exit(False);

  Root := Doc.DocumentElement;
  if (Root = nil) or (Root.TagName <> 'Project') then
    Exit(False);

  CallTargetNode := Root.SelectSingleNode('Target[@Name=''Build'']/CallTarget');
  Targets := CallTargetNode.Attributes.GetNamedItem('Targets').Text;
  // usw. ...
end;
Uli Gerhardt
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 08:15
Ausgehend von diesem Post http://www.delphipraxis.net/1365797-post2.html

Statt:
Delphi-Quellcode:
  Try
     idHttp1 := TIdHTTP.Create;
     responseStream := TMemoryStream.Create;
     Screen.Cursor := crHourGlass;
    try
      IdHTTP1.Get(sUrlLong, responseStream);
      IdHTTP1.Disconnect(True);
    except on E: EIdException Do
      FormMain.add_info('UST Abfrage gescheitert '+E.Message);
    end;
    SetString(resultstring, PAnsiChar(responseStream.Memory), responseStream.Size);
   Finally
     idHttp1.Free;
     responseStream.Clear;
     responseStream.Free;
     Screen.Cursor := crDefault;
   End;
mache mal einfach das:
Delphi-Quellcode:
  
var
  sl : TStringList;
  i : Integer;
  sErrorCode : String;

begin
...
  Try
     idHttp1 := TIdHTTP.Create;
     sl := TStringList.Create;
     Screen.Cursor := crHourGlass;
    try
      sl.Text := IdHTTP1.Get(sUrlLong);
      IdHTTP1.Disconnect(True);
      i := sl.IndexOf('<value><string>ErrorCode</string></value>');
      if i > -1 then begin
        sErrorCode := sl[i + 1];
        sErrorCode := AnsiReplaceText(sErrorCode,'<value><string>','');
        sErrorCode := AnsiReplaceText(sErrorCode,'</string></value>','');
      end;
    except on E: EIdException Do
      FormMain.add_info('UST Abfrage gescheitert '+E.Message);
    end;
   Finally
     sl.Free;
     idHttp1.Free;
     Screen.Cursor := crDefault;
   End;

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

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

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 10:03
Hallo Stefan,
damit bekommt er aber nur den ersten ErrorCode,
dass muss eine Schleife sein,
wenn ich das so wie unten verstanden habe.

<value><string>ErrorCode</string></value>
<value><string>200</string></value>
<value><string>300</string></value>
</data></array></value>
Heiko
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
383 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 10:16
Nein, es gibt nur einmal einen Errorcode und von daher ist Nahpets Lösung sehr intzeressant.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 10:21
Ich hoffe das kommt nicht falsch rüber, aber ihr durchsucht wirklich eine XML-Datei wie eine Text-Datei? Entscheidet sich die Gegenstelle einmal irgendwo ein Leerzeichen oder einen Zeilenumbruch woanders zu setzen und schon klappt nichts mehr.

Warum nicht über XML? Kostet doch kein Geld...
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 10:25
XML Parser nehmen fertig. Kostet sicher weniger Entwicklungszeit als eine Textsuche, die auch auf sich ändernde Zeilenumbrüche reagieren kann!


Edit:@ Günther: Es ist echt von Vorteil Threads bis zum Ende zu lesen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 10: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
Ein Therapeut entspricht 1024 Gigapeut.

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

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

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 10: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.277 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 14: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
 
#10

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 14: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 15:34 Uhr) Grund: Syntafehler behoben, siehe Post von Bra
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:23 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