Hallo,
ich muss inzwischen immer mehr mit Soap und XML-Dateien arbeiten.
Für meine Soap Requests benutze ich die WGet Klasse, die Georg hier veröffentlicht hat.
Die Bearbeitung von XML-Dateien erledige ich derzeit mit XMLStarlet.
Ein wirklich gutes Command Line Tool zum abfragen/bearbeiten von XML Dateien.
Einzig der Aufruf über die Shell ist halt in heutigen Zeiten dröge.
Xbase bietet hier ja nix adäquates an. Die XML-Beispiele habe ich mir angesehen und frage mich da
etwas nach dem Sinn dieser Beispiele.
Verstehe ich die Beispiele nicht oder ist das noch unausgereift?
Gibt es einen Ersatz / eine Klasse für XMLStarlet?
Nutzt jemand die Xbase++ eigenen XML-Funktionen?
Gruß Stefan
XML Dateien abfragen mit Xbase?
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: XML Dateien abfragen mit Xbase?
Hallo Stefan,
ja, die Alaska-XML-Funktionen sind schon etwas - verwirrend. Ich hab mich da mal für einen speziellen Fall durchgekämpft. Und das dann alles komplett raus geworfen als JSON von Xbase++ unterstützt wurde. Hat mir gleich den Code um mehrere hundert Zeilen Code erleichtert. Und entsprechend übersichtlicher gemacht.
Prinzipiell funktionieren die aber gut und schnell.
Es gibt auch neue XML-Funktionen, die eine XML mit einer einzigen Codezeile in ein DataObject überführen, das dann extrem leicht abzuarbeiten ist. Aber diese XML müssen dann die Feldbeschreibungen mit drin haben, was halt meist eher nicht der Fall ist. Das hilft bei fremden XML also nicht wirklich weiter. Ist wohl eher als Mittel zum Datenaustausch zwischen Layern oder verschiedenenen Xbase++-Diensten gedacht.
Was mußt Du denn genau machen? Eventuell könnte ich mal meinen alten Code wieder ausgraben, wenn Deine Aufgabe meiner damals ähnelt.
Jan
ja, die Alaska-XML-Funktionen sind schon etwas - verwirrend. Ich hab mich da mal für einen speziellen Fall durchgekämpft. Und das dann alles komplett raus geworfen als JSON von Xbase++ unterstützt wurde. Hat mir gleich den Code um mehrere hundert Zeilen Code erleichtert. Und entsprechend übersichtlicher gemacht.
Prinzipiell funktionieren die aber gut und schnell.
Es gibt auch neue XML-Funktionen, die eine XML mit einer einzigen Codezeile in ein DataObject überführen, das dann extrem leicht abzuarbeiten ist. Aber diese XML müssen dann die Feldbeschreibungen mit drin haben, was halt meist eher nicht der Fall ist. Das hilft bei fremden XML also nicht wirklich weiter. Ist wohl eher als Mittel zum Datenaustausch zwischen Layern oder verschiedenenen Xbase++-Diensten gedacht.
Was mußt Du denn genau machen? Eventuell könnte ich mal meinen alten Code wieder ausgraben, wenn Deine Aufgabe meiner damals ähnelt.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: XML Dateien abfragen mit Xbase?
Guten Morgen Jan,
ich muss bestimmte Werte aus einer XML-Datei auslesen, z.B.:
aus der unten stehenden XML-Datei mit dem XMLStarlet-Aufruf:
xml.exe sel -T -N "S=http://schemas.xmlsoap.org/soap/envelope/" -N "ns3=http://ws.gematik.de/conn/EventService/v7.2" -N "ns5=http://ws.gematik.de/conn/CardServiceCommon/v2.0" -N "ns8=http://ws.gematik.de/conn/CardService/v8.1" -N "ns2=http://ws.gematik.de/conn/ConnectorCommon/v5.0" -t -m "/S:Envelope/S:Body/ns3:GetCardsResponse/ns8:Cards/ns8:Card [ns5:CardType='SMC-B']" -v "ns2:CardHandle" getCards-resp.xml
den Wert : <ns3:CardHandle>1789e47d-a0a7-4288-a508-82a741a4d80b</ns3:CardHandle>
des Kartentyps: <ns5:CardType>SMC-B</ns5:CardType> abfragen
Wie gesagt..... funktioniert alles mit XMLStarlet aber halt auf Kommandozeilenebene. Und das "aufblitzen" des DOS-Fensters stört mich.
Gruß Stefan
ich muss bestimmte Werte aus einer XML-Datei auslesen, z.B.:
aus der unten stehenden XML-Datei mit dem XMLStarlet-Aufruf:
xml.exe sel -T -N "S=http://schemas.xmlsoap.org/soap/envelope/" -N "ns3=http://ws.gematik.de/conn/EventService/v7.2" -N "ns5=http://ws.gematik.de/conn/CardServiceCommon/v2.0" -N "ns8=http://ws.gematik.de/conn/CardService/v8.1" -N "ns2=http://ws.gematik.de/conn/ConnectorCommon/v5.0" -t -m "/S:Envelope/S:Body/ns3:GetCardsResponse/ns8:Cards/ns8:Card [ns5:CardType='SMC-B']" -v "ns2:CardHandle" getCards-resp.xml
den Wert : <ns3:CardHandle>1789e47d-a0a7-4288-a508-82a741a4d80b</ns3:CardHandle>
des Kartentyps: <ns5:CardType>SMC-B</ns5:CardType> abfragen
Wie gesagt..... funktioniert alles mit XMLStarlet aber halt auf Kommandozeilenebene. Und das "aufblitzen" des DOS-Fensters stört mich.
Gruß Stefan
Code: Alles auswählen
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<ns2:GetCardsResponse xmlns="http://ws.gematik.de/tel/error/v2.0" xmlns:ns10="http://www.w3.org/2000/09/xmldsig#" xmlns:ns11="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ns2="http://ws.gematik.de/conn/EventService/v7.2" xmlns:ns3="http://ws.gematik.de/conn/ConnectorCommon/v5.0" xmlns:ns4="http://ws.gematik.de/conn/ConnectorContext/v2.0" xmlns:ns5="http://ws.gematik.de/conn/CardServiceCommon/v2.0" xmlns:ns6="http://ws.gematik.de/int/version/ProductInformation/v1.1" xmlns:ns7="http://ws.gematik.de/conn/CardTerminalInfo/v8.0" xmlns:ns8="http://ws.gematik.de/conn/CardService/v8.1" xmlns:ns9="urn:oasis:names:tc:dss:1.0:core:schema">
<ns3:Status>
<ns3:Result>OK</ns3:Result>
</ns3:Status>
<ns8:Cards>
<ns8:Card>
<ns3:CardHandle>1fd23907-3312-4687-bdd6-a82307f877c5</ns3:CardHandle>
<ns5:CardType>EGK</ns5:CardType>
<ns8:CardVersion>
<ns8:COSVersion>
<ns8:Major>4</ns8:Major>
<ns8:Minor>3</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:COSVersion>
<ns8:ObjectSystemVersion>
<ns8:Major>4</ns8:Major>
<ns8:Minor>3</ns8:Minor>
<ns8:Revision>2</ns8:Revision>
</ns8:ObjectSystemVersion>
<ns8:CardPTPersVersion>
<ns8:Major>4</ns8:Major>
<ns8:Minor>2</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:CardPTPersVersion>
<ns8:LoggingVersion>
<ns8:Major>1</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:LoggingVersion>
<ns8:ATRVersion>
<ns8:Major>2</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:ATRVersion>
<ns8:GDOVersion>
<ns8:Major>1</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:GDOVersion>
</ns8:CardVersion>
<ns5:Iccsn>80276991110000000037</ns5:Iccsn>
<ns5:CtId>T1</ns5:CtId>
<ns5:SlotId>1</ns5:SlotId>
<ns8:InsertTime>2018-06-20T13:54:02.426+02:00</ns8:InsertTime>
<ns8:CardHolderName>Dïmitri Francesco Wützigmann</ns8:CardHolderName>
<ns8:Kvnr>X110483272</ns8:Kvnr>
<ns8:CertificateExpirationDate>2021-10-17</ns8:CertificateExpirationDate>
</ns8:Card>
<ns8:Card>
<ns3:CardHandle>1789e47d-a0a7-4288-a508-82a741a4d80b</ns3:CardHandle>
<ns5:CardType>SMC-B</ns5:CardType>
<ns8:CardVersion>
<ns8:COSVersion>
<ns8:Major>4</ns8:Major>
<ns8:Minor>3</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:COSVersion>
<ns8:ObjectSystemVersion>
<ns8:Major>4</ns8:Major>
<ns8:Minor>3</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:ObjectSystemVersion>
<ns8:CardPTPersVersion>
<ns8:Major>4</ns8:Major>
<ns8:Minor>4</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:CardPTPersVersion>
<ns8:LoggingVersion>
<ns8:Major>1</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:LoggingVersion>
<ns8:ATRVersion>
<ns8:Major>2</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:ATRVersion>
<ns8:GDOVersion>
<ns8:Major>1</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:GDOVersion>
</ns8:CardVersion>
<ns5:Iccsn>80276883110000016161</ns5:Iccsn>
<ns5:CtId>T1</ns5:CtId>
<ns5:SlotId>2</ns5:SlotId>
<ns8:InsertTime>2018-06-20T09:46:12.809+02:00</ns8:InsertTime>
<ns8:CardHolderName>Test Praxis Valid</ns8:CardHolderName>
<ns8:CertificateExpirationDate>2048-12-31</ns8:CertificateExpirationDate>
</ns8:Card>
<ns8:Card>
<ns3:CardHandle>d6f2d9e4-fcd7-462c-aa93-24248839e537</ns3:CardHandle>
<ns5:CardType>SMC-KT</ns5:CardType>
<ns8:CardVersion>
<ns8:COSVersion>
<ns8:Major>4</ns8:Major>
<ns8:Minor>3</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:COSVersion>
<ns8:ObjectSystemVersion>
<ns8:Major>4</ns8:Major>
<ns8:Minor>3</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:ObjectSystemVersion>
<ns8:CardPTPersVersion>
<ns8:Major>4</ns8:Major>
<ns8:Minor>2</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:CardPTPersVersion>
<ns8:LoggingVersion>
<ns8:Major>1</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:LoggingVersion>
<ns8:ATRVersion>
<ns8:Major>2</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:ATRVersion>
<ns8:GDOVersion>
<ns8:Major>1</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:GDOVersion>
<ns8:KeyInfoVersion>
<ns8:Major>1</ns8:Major>
<ns8:Minor>0</ns8:Minor>
<ns8:Revision>0</ns8:Revision>
</ns8:KeyInfoVersion>
</ns8:CardVersion>
<ns5:Iccsn>80276991110000000012</ns5:Iccsn>
<ns5:CtId>T1</ns5:CtId>
<ns5:SlotId>4</ns5:SlotId>
<ns8:InsertTime>2018-06-20T09:50:51.735+02:00</ns8:InsertTime>
<ns8:CardHolderName>80276991110000000012</ns8:CardHolderName>
<ns8:CertificateExpirationDate>2021-06-16</ns8:CertificateExpirationDate>
</ns8:Card>
</ns8:Cards>
</ns2:GetCardsResponse>
</S:Body>
</S:Envelope>
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2513
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: XML Dateien abfragen mit Xbase?
Hallo Stefan
dann ruf doch die Shell im HIntergrund auf. Bei xbase RunShell() wäre das der Parameter 4 (LBackGround)
Dann siehst du auf dem Bildschirm gar nichts.
dann ruf doch die Shell im HIntergrund auf. Bei xbase RunShell() wäre das der Parameter 4 (LBackGround)
Dann siehst du auf dem Bildschirm gar nichts.
Valar Morghulis
Gruss Carlo
Gruss Carlo
-
- Cut&Paste-Entwickler
- Beiträge: 23
- Registriert: Di, 02. Apr 2019 9:09
- Danksagung erhalten: 6 Mal
Re: XML Dateien abfragen mit Xbase?
Hallo Stefan,
ich arbeite mit den xml-Funktionen von xbase.
Da sieht das dann so aus (ungetestet):
LG
Martin
ich arbeite mit den xml-Funktionen von xbase.
Da sieht das dann so aus (ungetestet):
Code: Alles auswählen
cInhalt := Memoread("xmldatei")
oXml := XmlSimpleParser(cInhalt)
aCards := oXml:Header:Body:GetCardsResponse:Cards
nEnd := Len(aCards)
IF nEnd != nil
FOR n := 1 TO nEnd
cCard_Typ := aCards[n]:CardType
if cCard_Typ == "SMC-B"
// ...
endif
NEXT
ENDIF
Martin
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: XML Dateien abfragen mit Xbase?
@ramses: Habe ich bereits geändert. manchmal ist man etwas betriebsblind. Sonst rufe ich die Runshell ja auch
im Hintergrund auf......
@Martin: Schau ich mir mal an, danke!
Gruß Stefan
im Hintergrund auf......
@Martin: Schau ich mir mal an, danke!
Gruß Stefan