![]() |
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> |
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 |
AW: XML parsen, aber wie
Ja, nur einen.
Der kann dann halt bummelig 25 verschiedene Werte aufweisen, aber das war es dann. |
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. |
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; |
AW: XML parsen, aber wie
Ausgehend von diesem Post
![]() Statt:
Delphi-Quellcode:
mache mal einfach das:
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;
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; |
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> |
AW: XML parsen, aber wie
Nein, es gibt nur einmal einen Errorcode und von daher ist Nahpets Lösung sehr intzeressant.
|
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... |
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 21:56 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 by Thomas Breitkreuz