AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML Namespace in Databinding Wizard
Thema durchsuchen
Ansicht
Themen-Optionen

XML Namespace in Databinding Wizard

Ein Thema von WiPhi · begonnen am 18. Mai 2020 · letzter Beitrag vom 16. Feb 2021
Antwort Antwort
WiPhi

Registriert seit: 19. Feb 2015
90 Beiträge
 
Delphi 11 Alexandria
 
#1

XML Namespace in Databinding Wizard

  Alt 18. Mai 2020, 17:39
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 .

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!
Wer sucht, der findet. Wer länger sucht, findet mehr.
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#2

AW: XML Namespace in Databinding Wizard

  Alt 16. Feb 2021, 13:50
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

Geändert von Incocnito (16. Feb 2021 um 15:31 Uhr) Grund: Namespace bei FindNode vergessen
  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 14:52 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