Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   XML Daten lesen (https://www.delphipraxis.net/197710-xml-daten-lesen.html)

MyRealName 29. Aug 2018 15:03

XML Daten lesen
 
Hallo,

also generell lese und schreibe ich XML ohne Probleme, aber ich nutze da nur Attribute für die Daten.
Ein Provider schickt mir als Antwort ein XML im folgendem Format :

Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<TransaccionError>
   <TransaccionId>64</TransaccionId>
   <Error>Error al intentar leer el XML. DETALLE: Data at the root level is invalid. Line 1, position 1. Sugerencia: Revisar que los caracteres ingresados sean válidos.</Error>
</TransaccionError>
wie kann ich am einfachsten mit der TXMLDocument Komponente die Werte auslesen ?

Danke schonmal

Der schöne Günther 29. Aug 2018 16:02

AW: XML Daten lesen
 
So:
Delphi-Quellcode:
implementation

uses XmlIntf, XmlDoc, XPathHelper;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
   xPath = '//TransaccionError/Error';
var
   xmlDoc: IXMLDocument;
   xmlNode: IXMLNode;
begin
   xmlDoc := LoadXMLData(Memo1.Lines.Text);
   xmlNode := TXpathHelper.SelectNode(xmlDoc.DocumentElement, xPath);
   ShowMessage(xmlNode.Text);
end;

XPathHelper.pas ist hier:

https://www.delphipraxis.net/177650-...ml#post1236534

MyRealName 29. Aug 2018 16:18

AW: XML Daten lesen
 
That works like a charm, thanks :)

Codehunter 29. Aug 2018 21:03

AW: XML Daten lesen
 
XPath ist für kleine XML-Datenmengen ideal. Ich habe das Konzept sogar auf eine eigene Parserimplementation für JSON-Daten umgesetzt. Aber man sollte immer dran denken, dass das für größere XML-Datenmengen zum Performancekiller werden kann, wenn man da viel iterativ machen muss.

MyRealName 3. Sep 2018 01:46

AW: XML Daten lesen
 
Bin mal wieder auf einen Stolperstein gestossen, ein anderes XML, welches ich vom Provider bekomme, nutzt Prefixe, mit denen habe ich auch noch nichts gemacht :

Code:
<?xml version="1.0" encoding="utf-8"?>
<fe:Invoice xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:clmIANAMIMEMediaType="urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003" xmlns:sts="http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1" xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:clm54217="urn:un:unece:uncefact:codelist:specification:54217:2001" xmlns:clm66411="urn:un:unece:uncefact:codelist:specification:66411:2001" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:fe="http://www.dian.gov.co/contratos/facturaelectronica/v1">
   <cbc:UBLVersionID>UBL 2.0</cbc:UBLVersionID>
   <cbc:ProfileID>DIAN 1.0</cbc:ProfileID>
   <cbc:ID>PRUE980020032</cbc:ID>
   <cbc:UUID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">50d62edcf4d0d41125ce62527802a1e8b5ac2fa9</cbc:UUID>
</fe:Invoice>
Das XML ist noch etwas länger, ich habe es mal gekürzt.

ich versuche an den Wert der UUID (50d62edcf4d0d41125ce62527802a1e8b5ac2fa9) zu kommen, aber egal, welchen Pfad ich nutze ('//Invoice/UUID' oder '//fe:Invoice/cbc:UUID'), es wirds nicht gefunden :(

Codehunter 3. Sep 2018 06:43

AW: XML Daten lesen
 
Nicht Prefix sondern Namespace ;-)

Könnte das evtl. daran liegen, dass die beiden NS-Pfade
Code:
sts:http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures
fe:http://www.dian.gov.co/contratos/facturaelectronica/v1
in einem 404er enden?

MyRealName 3. Sep 2018 12:32

AW: XML Daten lesen
 
Liest denn der Interpreter das und rennt dort hin? Ich habe daraus ja keinen Einfluss, kriege das XML ja so gesendet. Und das ist leider die steuerbehörde, die lassen sich garnichts sagen von mir :p

Codehunter 3. Sep 2018 14:17

AW: XML Daten lesen
 
Also ich habe nur testweise mal über einen Online-XSD-Generator eine XSD dazu erstellt und dann anstelle der genannten URL mit file:/// eingebunden. Funktioniert hats zwar nicht weil die XSD nicht passte, aber die Fehlermeldungen waren dann andere. Insofern würde ich sagen ja, der versucht die zu laden. Ob man dem Parser das abgewöhnen kann weiß ich spontan grad nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.

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