Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte » 

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   XML parsen, aber wie (https://www.delphipraxis.net/192207-xml-parsen-aber-wie.html)

stifflersmom 29. Mär 2017 08:16

XML parsen, aber wie
 
Moin,

ich habe hier ein XML Ergebnis vom Bundesamt für Steuern und will eigentlich nur den Errorcode haben.
Wie würdet Ihr das auseinandernehmen, einen "vollständigen" XML-Parser benutzen oder versuchen mit Pos den Bereich des Errorcodes zu ermitteln?
Code:
<params>
<param>
<value><array><data>
<value><string>UstId_1</string></value>
<value><string>DE1234567889</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>ErrorCode</string></value>
<value><string>200</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>UstId_2</string></value>
<value><string>IT987654321</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Druck</string></value>
<value><string>nein</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Erg_PLZ</string></value>
<value><string></string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Ort</string></value>
<value><string></string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Datum</string></value>
<value><string>28.03.2017</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>PLZ</string></value>
<value><string></string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Erg_Ort</string></value>
<value><string></string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Uhrzeit</string></value>
<value><string>15:08:27</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Erg_Name</string></value>
<value><string></string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Gueltig_ab</string></value>
<value><string></string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Gueltig_bis</string></value>
<value><string></string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Strasse</string></value>
<value><string></string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Firmenname</string></value>
<value><string></string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>Erg_Str</string></value>
<value><string></string></value>
</data></array></value>
</param>
</params>

Sherlock 29. Mär 2017 08:20

AW: XML parsen, aber wie
 
Wenn Du wirklich und für alle Zeiten nur den Errorcode brauchst, nimm halt Pos. Mit einem XML-Parser musst Du ja ähnlich vorgehen, nur halt mit anderem Zeug drumrum. Gibt es aber wirklich nur einen Errocode?

Sherlock

stifflersmom 29. Mär 2017 08:26

AW: XML parsen, aber wie
 
Ja, nur einen.
Der kann dann halt bummelig 25 verschiedene Werte aufweisen, aber das war es dann.

hoika 29. Mär 2017 08:37

AW: XML parsen, aber wie
 
Hallo,
das ist ja das betreffende Stück

// Startzeile
<value><string>ErrorCode</string></value>
<value><string>200</string></value>
// Endzeile
</data></array></value>

In dem Fall würde ich das ganze in eine StringList packen,
die durchlaufen bis zur Zeile <value><string>ErrorCode</string></value>
(Pos()=1)
danach den Index an eine zweite Methode übergeben, und die durchläuft die StringList dann bis zum </data></array></value>
und holt sich per StringReplace('<value><string>','') und StringReplace('</string></value>','') die Errorcodes

Quick&Dirty halt

Du solltest bloss vor dem Benutzen einer Zeile (Sche, Ersetzen) ein Trim machen.

uligerhardt 29. Mär 2017 08:39

AW: XML parsen, aber wie
 
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;

nahpets 29. Mär 2017 09:15

AW: XML parsen, aber wie
 
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;

hoika 29. Mär 2017 11:03

AW: XML parsen, aber wie
 
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>

stifflersmom 29. Mär 2017 11:16

AW: XML parsen, aber wie
 
Nein, es gibt nur einmal einen Errorcode und von daher ist Nahpets Lösung sehr intzeressant.

Der schöne Günther 29. Mär 2017 11:21

AW: XML parsen, aber wie
 
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...

Lemmy 29. Mär 2017 11:25

AW: XML parsen, aber wie
 
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 :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr.
Seite 1 von 4  1 23     Letzte » 

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf