![]() |
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:
wie kann ich am einfachsten mit der TXMLDocument Komponente die Werte auslesen ?
<?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> Danke schonmal |
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: ![]() |
AW: XML Daten lesen
That works like a charm, thanks :)
|
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.
|
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:
Das XML ist noch etwas länger, ich habe es mal gekürzt.
<?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> 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 :( |
AW: XML Daten lesen
Nicht Prefix sondern Namespace ;-)
Könnte das evtl. daran liegen, dass die beiden NS-Pfade
Code:
in einem 404er enden?
sts:http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures
fe:http://www.dian.gov.co/contratos/facturaelectronica/v1 |
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
|
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 04:14 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-2025 by Thomas Breitkreuz