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 1 von 4  1 23     Letzte » 
stifflersmom

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

XML parsen, aber wie

  Alt 29. Mär 2017, 08:16
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>
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.555 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 08:20
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
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
stifflersmom

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

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 08:26
Ja, nur einen.
Der kann dann halt bummelig 25 verschiedene Werte aufweisen, aber das war es dann.
  Mit Zitat antworten Zitat
hoika

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

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 08:37
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.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

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

AW: XML parsen, aber wie

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

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 09: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 17:44 Uhr)
  Mit Zitat antworten Zitat
hoika

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

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 11: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
322 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 11: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
5.742 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 11: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.293 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: XML parsen, aber wie

  Alt 29. Mär 2017, 11: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
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 15:06 Uhr.
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