AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML Daten lesen

Ein Thema von MyRealName · begonnen am 29. Aug 2018 · letzter Beitrag vom 3. Sep 2018
Antwort Antwort
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#1

XML Daten lesen

  Alt 29. Aug 2018, 16:03
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: XML Daten lesen

  Alt 29. Aug 2018, 17:02
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
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: XML Daten lesen

  Alt 29. Aug 2018, 17:18
That works like a charm, thanks
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: XML Daten lesen

  Alt 29. Aug 2018, 22:03
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.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: XML Daten lesen

  Alt 3. Sep 2018, 02:46
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
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: XML Daten lesen

  Alt 3. Sep 2018, 07:43
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?
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: XML Daten lesen

  Alt 3. Sep 2018, 13:32
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
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: XML Daten lesen

  Alt 3. Sep 2018, 15:17
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.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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