Discussion:
XML erstellen anhand von XSD
(zu alt für eine Antwort)
Merwed
vor 18 Jahren
Permalink
Folgendes Problem:

ich möchte eine XML-Datei erstellen, die einem XSD (XML-Schema) entspricht.
Dazu möchte ich XPath-Ausdrücke verwenden, die angeben, an welchen Stellen
im (zunächst leeren) XML bestimmte Daten eingefügt werden sollen.

Bisher habe ich einfach eine Dataset-Komponente genommen, die ein XSD
eingelesen hat und damit die richtige Struktur hatte. Dann hab ich neue
Daten hinzugefügt, indem ich jeweils neue Zeilen in den Tabellen dieses
DataSet-Objektes erzeugt habe (mit ein bißchen Logik zur Bereitstellung von
Schlüsseln/Fremdschlüsseln per DataRelations). Das XML-Dokument habe ich
dann per dataset.getXML() erhalten.

Mittlerweile ist das XSD aber komplexer geworden, sodass es nicht mehr auf
die relationale DataSet-Komponente abgebildet werden kann. Deshalb suche ich
nach einer Möglichkeit, XML-Dokumente über irgendeine XSD-Komponente o. ä.
zu erzeugen.

Weiss jemand, wie das funktionieren könnte?

Viele Grüße!
Frank Dzaebel
vor 18 Jahren
Permalink
Hallo Merwed,
...
Hast Du schon mal aus der XML eine XSD generiert,
zum Beispiel mit dem xsd.exe Tool?
Klar, das kann auch nicht alles abbilden, aber ggf. kannst
Du die XML-Datei ja auch etwas relational-konformer gestalten.

[Aus XML mittels XSD.exe automatisch Schreib-Lese-Zugriffe generieren]
http://dzaebel.net/XmlXsdLesenSchreiben.htm

Ansonsten ist natürlich der Weg (z.B.) über XPATH immer offen.
Oft fehlt einem hier aber für meine Begriffe die Typsicherheit,
die immer wieder Fehlerquellen beinhaltet.
http://groups.google.de/group/microsoft.public.de.german.entwickler.dotnet.csharp/msg/db4ce15fb02c3dfe

Ein paar weitere Artikel vielleicht noch als Ideengeber:

[XML als C# Klasse]
http://dzaebel.net/XmlAsCsharpClass.htm

[Mit dem XmlSerializer eigene Objekte serialisieren und deserialisieren]
http://dzaebel.net/XmlSerializer.htm

[Typsichere Settings mit eigenen Array-Typen]
http://dzaebel.net/SettingsExample2.htm


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Merwed
vor 18 Jahren
Permalink
Hallo Frank,

typischerweise brauche ich einige Zeit, Deine Postings vollständig zu
begreifen. ich werd mal versuchen, trotzdem keine blöden Fragen zu stellen.
Post by Frank Dzaebel
Hast Du schon mal aus der XML eine XSD generiert,
zum Beispiel mit dem xsd.exe Tool?
Klar, das kann auch nicht alles abbilden, aber ggf. kannst
Du die XML-Datei ja auch etwas relational-konformer gestalten.
Ich habe gar keine XML-Datei; ich will eine erstellen. Tatsächlich gibt es
nur das XSD, das beschreibt, wie die XML-Dokumente aufgebaut sein müssen. Es
gibt zwar eine Beispiel-XML-Datei, aber diese ist nur eine mögliche von
unendlich(?) vielen Ausprägungen der XSD.

Das XSD selbst kann ich nicht verändern. Es ist von einem fremden
Unternehmen vorgegeben und beschreibt eben XML-Dokumente, die von einer
Software dieses fremden Unternehmens verarbeitet werden können. Bei dieser
Software handelt es sich um einen Webserver, der Versicherungstarife
berechnet. Das XSD beschreibt die Struktur einer Tarifierungsanfrage. Diese
Anfragen in Form von XML unterscheiden sich durch den gewählten Tarif und
die verscheidenen Dinge, die für so einen Tarif eben angegeben werden
müssen. Bei allen Tarifen gibt es zB den Zahlbeitrag, die Anzahl eigener
Kinder und das Jahreseinkommen müssen nur für Riester-Tarife angegeben
werden. Eine beliebige Anzahl von Beispiel-Anfragen bringt mich hier also
nicht weiter.
Post by Frank Dzaebel
Ansonsten ist natürlich der Weg (z.B.) über XPATH immer offen.
Oft fehlt einem hier aber für meine Begriffe die Typsicherheit,
die immer wieder Fehlerquellen beinhaltet.
http://groups.google.de/group/microsoft.public.de.german.entwickler.dotnet.csharp/msg/db4ce15fb02c3dfe
Ich habe zunächst gar kein XML-Dokument, in dem ich mit XPath adressieren
könnte. Ich habe nur das XSD, aus dem sich die XPath-Adressen ergeben. Ich
will jetzt sagen: "Schreibe mir den Wert '3' in ein XML-Dokument, das zur
Datei 'Service.xsd' konform ist an die XPath-Adresse
'//slv:Riester/slv:AnzahlKinder'!" Das XML-Doukment ist aber zunächst LEER
("<xml/>").

Ich könnte mir vorstellen, dass .NET die Möglichkeit bietet, ein neues
XML-Dokuement zu erzeugen, dass zwar noch leer ist, aber bereits auf der
Struktur eines XSD beruht. Dafür suche ich entsprechende C#-Befehle :)

In dieses XML-Dokument müsste man dann (z. B. mit XPath-Ausdrücken)
hinenschreiben können, sodass es sich nach und nach mit Daten füllt.

Danke auch für die Links.

Viele Grüße!
Michael v. Fondern
vor 18 Jahren
Permalink
Hallo Merwed,
^^^^^^^^

(wir reden uns hier gerne mit vollem Namen an)
Post by Merwed
Mittlerweile ist das XSD aber komplexer geworden, sodass es nicht mehr auf
die relationale DataSet-Komponente abgebildet werden kann. Deshalb suche ich
nach einer Möglichkeit, XML-Dokumente über irgendeine XSD-Komponente o. ä.
zu erzeugen.
Du könntest die Klasse XmlDocument verwenden, um dein XML-Dokument zu
erzeugen, dann der XmlDocument.Schemas-Eigenschaft ein zuvor
initialisiertes XmlSchemaSet-Objekt zuweisen und dann mit
XmlDocument.Validate im Nachgang prüfen, dass die Struktur deines
Dokuments korrekt eingehalten wurde.

Grüße

- Michael -

Loading...