Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML Namespace in Databinding Wizard (https://www.delphipraxis.net/204315-xml-namespace-databinding-wizard.html)

WiPhi 18. Mai 2020 16:39

XML Namespace in Databinding Wizard
 
Hallo liebe Delphianer,

uns beschäftigt schon längere Zeit das Thema Namespaces in XML. Um den neuen Anforderungen gerecht zu werden, und um uns (hoffentlich) viel Programmieraufwand zu sparen, wollen wir zukünftig die für uns bereit gestellten XML-Schemata in Delphi einlesen und auf Basis deren unsere XML-Dateien erstellen.
Derzeit erstellen wir alle XML-Dateien "von Hand" anstatt den Databinding-Wizard aus Delphi zu nutzen.

Für "simple" XML-Dateien scheint das auch eine gangbare Lösung zu sein, jedoch versagt der ganze Assistent, wenn es um XML-Dateien mit Namespaces geht. Konkrekt kann eine Datei wie folgt aussehen:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<SampleRootTag
xmlns="http://www.xyz.de/XMLSchema/Header/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.xyz.de/XMLSchema/Header/1.0 Header.xsd"
xmlns:aa="http://www.xyz.de/XMLSchema/AA_SampleNamespace"
xmlns:bb="http://www.xyz.de/XMLSchema/BB_SampleNamespace"
xmlns:cc="http://www.xyz.de/XMLSchema/CC_SampleNamespace/1.1" Versionsnummer="1.0.0">
   <Header Versionsnummer="1.0.0">
      <XMLTag>
...
...
...
      </XMLTag>
   </Header>
   <Body>
        <aa:Aufzaehlung>
            <cc:Element Versionsnummer="1.1.0">
                <cc:Steuerung>
                    <bb:Absender>123456789</bb:Absender>
                    <bb:Empfaenger>987654321</bb:Empfaenger>
                    <bb:Datum>2020-04-24T11:00:15</bb:Datum>
                </cc:Steuerung>
            </cc:Element>
        </aa:Aufzaehlung>
    </Body>
</SampleRootTag>
Von der Struktur her scheint das auch alles zu klappen, nur fehlen eben die Deklarationen der etwaigen Namespaces.
Nach etwas Googleei fande ich folgende Lösungen: https://github.com/miszellek/XMLDocHelper und https://www.tfzx.net/en/article/4885384.html

Generell bin ich aber der Meinung, dass der Wizard das aber leisten sollte und würde nur ungern auf solche "Basteleien" setzen :roll:.

Nun haben wir derzeit eine Delphi 10.2 Pro im Einsatz und fragen uns, ob es mit einer neueren Version und ggf. einer Enterprise Version funktionieren könnte. Mit der Trial-Version der aktuellen Version und dem XML-Assistenten kamen wir allerdings leider wieder nicht besonders weit und bekamen genau das gleiche Ergebnis wie auch schon zuvor. Aber vielleicht gibt es ja mittlerweile solch eine Option die wir noch nicht gefunden haben?

Über Ratschläge und Lösungsansätze würde ich mich sehr freuen!

Incocnito 16. Feb 2021 12:50

AW: XML Namespace in Databinding Wizard
 
Vieleleicht ist auch hier dieser Thread
https://www.delphipraxis.net/206990-...-gefunden.html
interessant.

Wie dort beschrieben habe ich nach der Verwendung des Wizard bei "entsprechenden" XML-Knoten
(hier musst jeder leider selbst nachdenken welche Knoten das betrifft) aus:
Delphi-Quellcode:
function TXMLIrgendwas.Get_Tolledaten: IXMLTolleDaten;
begin
  Result := ChildNodes['Tolledaten'] as IXMLTolleDaten;
end;
das hier gemacht:
Delphi-Quellcode:
function TXMLIrgendwas.Get_Tolledaten: IXMLTolleDaten;
var
  node : IXmlNode;
const
  sCurrNodeName = 'Tolledaten';
  sNamespaceURI = 'http://www.wichtigeseite.de/blabla/v1.1';
begin
  node := ChildNodes.FindNode(sCurrNodeName, sNamespaceURI);
  if (node = nil) then
  begin
    node := AddChild(sCurrNodeName, sNamespaceURI);
  end;
  Result := TXMLTolleDaten.CreateHosted(node as TXmlNode);
end;
Ich hoffe das hilft anderen, falls die mal auf ein vergleichbares Problem stoßen.

LG Incocnito


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 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