AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML XML Datenbindung und Substitution Groups

XML Datenbindung und Substitution Groups

Ein Thema von Gor1 · begonnen am 6. Mär 2015 · letzter Beitrag vom 12. Mär 2015
Antwort Antwort
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: XML Datenbindung und Substitution Groups

  Alt 11. Mär 2015, 08:41
Zitat:
Du hast also viele verschiedene Möglichkeiten:
- eine Übersetzung/Kapselung von Deinen Objekten in die XML-Databinding Objekte bereitstellen. Somit trennst Du "Deine" Objektstruktur von der des XML-Databindings und kannst auf der einen Seite komfortabel mit "Deinen" Objekten arbeiten und auf der anderen Seite immer Schemakonform speichern
- eine Übersetzung von Deinen Objekten in das XML-Format manuell vornehmen
- eine Übersetzung von Deinen Objekten in das XML-Format von einer anderen Bibliothek übernehmen lassen, bei der das z.B. über Attribute und RTTI läuft (z.B. den SvSerializer)
Das Problem ist ja, dass die von der Datenbindung generierten Objekte beim einlesen einer zum Schema passenenden Datei schon gar nicht gefüllt werden, deshalb kann ich diese auch nicht verwenden (unabhängig davon, wie meine interne Struktur dann aussieht).

Den Sv-Serializer habe ich mal ausprobiert, leider habe ich da das Problem, dass bei der Serialisierung die Properties alle in Elemente des XML-Knotens umgewandelt werden, das Schema erwartet aber Attribute. Gibt es da vielleicht eine Möglichkeit, um für eine Property zu bestimmen, ob sie als Element oder als Attribut interpretiert werden soll?

Ansonsten bleibt mir wohl wirklich nur, die Übersetzung manuell vorzunehmen.
  Mit Zitat antworten Zitat
alda

Registriert seit: 24. Mär 2014
Ort: Karlsruhe
93 Beiträge
 
Delphi XE6 Architect
 
#2

AW: XML Datenbindung und Substitution Groups

  Alt 11. Mär 2015, 19:52
Das Problem ist ja, dass die von der Datenbindung generierten Objekte beim einlesen einer zum Schema passenenden Datei schon gar nicht gefüllt werden, deshalb kann ich diese auch nicht verwenden (unabhängig davon, wie meine interne Struktur dann aussieht).
Dann hast Du was falsche gemacht. Wie liest Du die XML-Datei denn ein? Poste mal bitte einen Snippet. Out of the Box (also mit den generierten Implementierungen) sollte erstmal alles reibungslos laufen - vorausgesetzt Du liest es über die bereitgestellten Methoden des Databindings ein ;D


Den Sv-Serializer habe ich mal ausprobiert, leider habe ich da das Problem, dass bei der Serialisierung die Properties alle in Elemente des XML-Knotens umgewandelt werden, das Schema erwartet aber Attribute. Gibt es da vielleicht eine Möglichkeit, um für eine Property zu bestimmen, ob sie als Element oder als Attribut interpretiert werden soll?
Ja ich glaube er kann das nicht, bin mir aber nicht sicher. Konnte zumindest auf die schnelle kein vorhandenes Attribut finden, mit dem das zu steuern wäre. Ich arbeite selbst auch an einer eigenen Implementierungen da mir die bestehenden Bibliotheken nicht gefallen und zu unflexibel sind, allerdings aufgrund zu wenig Zeit leider noch under construction

Ansonsten gibt es noch eine Implementierung in DSharp, die allerdings auch nicht komplett ist (auf der basiert auch meine eigene). Da blickt man, im vergleich zum SvSerializer auch wenigstens durch und kann manuell recht schnell etwas ändern: Klick mich (DSharp.Core.XmlSerialization.*)

Geändert von alda (11. Mär 2015 um 19:55 Uhr)
  Mit Zitat antworten Zitat
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: XML Datenbindung und Substitution Groups

  Alt 12. Mär 2015, 08:22
Zitat:
Dann hast Du was falsche gemacht. Wie liest Du die XML-Datei denn ein? Poste mal bitte einen Snippet. Out of the Box (also mit den generierten Implementierungen) sollte erstmal alles reibungslos laufen - vorausgesetzt Du liest es über die bereitgestellten Methoden des Databindings ein ;D
Ich glaube, es gab da ein Mißverständnis. Mein Problem ist gerade, dass aufgrund der Verwendung von Substitution Groups im Schema der von der Datenbindung erzeugte Code nicht funktioniert, also sich damit Schema-konforme Dateien weder sinnvoll einlesen noch neu erzeugen und dann schreiben lassen.
Ich habe die XML-Datenbindung auch früher schon mit anderen (einfacheren) Schemata benutzt und hatte da nie Probleme, aber da wurden eben keine Substitution Groups verwendet.

Wenn ich bei dem Beispiel, das ich gepostet habe, mit
Delphi-Quellcode:
procedure Einlesen;
var iBasis: IXMLBasis;
begin
  iBasis := LoadBasis('Beispieldatei.xml');
end;
die XML-Datei einlese, dann sollte ja iBasis Listenelemente vom Typ IXMLListenElement enthalten (bzw. eben von den von IXMLListenElement abgeleiteten Typen IXMLElement1, ...). Diese Liste ist aber leer, iBasis.Count ist Null. Die Datenbindung schafft es leider nicht, ein IXMLElement1 einzulesen und in die Liste einzuhängen.
Umgekehrt funktioniert es eben auch nicht (bzw. ich habe es nicht hinbekommen), ein neues Element vom Typ IXMLElement1 zu erzeugen und unter iBasis einzufügen.
Ich habe auch versucht, XMLDocument so zu modifizieren, dass eine Funktion Add: IXMLElement1, die ich in IXMLBasis eingefügt habe, auch ein IXMLElement1 erzeugt, aber dabei bin ich immer an einer Fehlermeldung "...Interface wird nicht unterstützt" gescheitert.
  Mit Zitat antworten Zitat
alda

Registriert seit: 24. Mär 2014
Ort: Karlsruhe
93 Beiträge
 
Delphi XE6 Architect
 
#4

AW: XML Datenbindung und Substitution Groups

  Alt 12. Mär 2015, 21:55
Das hab ich in der Tat überlesen, danke für den Hinweis Hätte nicht gedacht, dass er das (die SubstitutionGroups) überhaupt in den generierten Klassen abbilden kann, aber ich werd das morgen gleich mal bei mir testen, das interessiert mich jetzt
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:54 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