XML Dateien abfragen mit Xbase?

Vom Front-End bis SOAP.

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
1000 working lines a day
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

XML Dateien abfragen mit Xbase?

Beitrag von mini990 »

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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: XML Dateien abfragen mit Xbase?

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
mini990
1000 working lines a day
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?

Beitrag von mini990 »

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

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>
ramses
Der Entwickler von "Deep Thought"
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?

Beitrag von ramses »

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.
Valar Morghulis

Gruss Carlo
Martin_L
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 23
Registriert: Di, 02. Apr 2019 9:09
Danksagung erhalten: 6 Mal

Re: XML Dateien abfragen mit Xbase?

Beitrag von Martin_L »

Hallo Stefan,

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
LG
Martin
Benutzeravatar
mini990
1000 working lines a day
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?

Beitrag von mini990 »

@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
Antworten