Frage

Ich mag die beste Methode kennen, um dieses Problem zu lösen: Ich möchte eine leere Vorlage xml aus einem XML-Schema erstellen. Alle erforderlichen Elemente und Attribute geschaffen würden und ihre Werte würden alle leeren Strings sein.

Der nächste Schritt ist, wie das Kind xml bestimmen Knoten ein bestimmte Knoten haben könnte. z.B. Ich würde ein Knoten wählen hat minOccurs = „0“, maxOccurs = „unbounded“ für eines seiner Kinder. Ich wäre in der Lage, alles über das Kind, um zu bestimmen, seine Attribute, seinen Namen, seinen Werttyp, etc.

mehr Kontext geben, über die Situation, ich arbeite an einem Werkzeug, das Benutzer XML-Dateien in einer benutzerfreundlichen Einstellung bearbeiten. Für zB Sie konnten ein neues Konto auf die ‚Konto db‘ Knoten hinzufügen und sie würden sehen, dass der einzige verfügbare Knoten ein Konto Knoten. Als nächstes, wenn sie versuchen, die Kinder auf dem Konto Knoten hinzuzufügen und die Entscheidungen würden Name Knoten (erforderlich), Passwort Knoten (erforderlich), Einstellungen Knoten (optional) usw. sein Wie bestimme ich programmatisch, was Kinder der Kontoknoten zur Verfügung hat es und was sind die Attribute und Einstellungen sind auf diese Kinder?

Dies ist in C # 2.0 mit .NET 2.0.

Insgesamt welche Klassen verwende ich ein Schema zu lesen und zu analysieren, es nützliche Informationen zu bekommen xml für das Erstellen? Ich hatte in meiner Naivität hoffen, dass seit xsd xml war an sich wäre es irgendeine Art von DOM-Modell sein, das ich durchqueren konnte.

Das möchte ich so keine Verwendung von externen Tools auf mein Programm beschränkt werden wie OxygenXml, VS, xsd.exe, etc.

War es hilfreich?

Lösung

Es klingt wie das, was Sie tun möchten, ist die Funktionalität hinter XML IntelliSense in den meisten guten XML-Editoren repliziert. dh las ein XML-Schema und herauszufinden, welche Elemente und Attribute können als nächstes kommen.

Wir haben etwas sehr ähnliches an einem Projekt getan, was wir vor einiger Zeit auf gearbeitet. Zur Herstellung von etwas, das die meiste Zeit funktioniert, ist eine Menge Arbeit, um Produkt etwas, das die ganze Zeit funktioniert, ist viel Arbeit!

Im Grunde müssen Sie die XSD laden (die XmlSchema Objekte in .net ermöglicht es Ihnen, dies zu tun). Aber das SOM-Objektmodell sie belichten ist sehr roh, so dass Sie eine ganze Menge Arbeit tun, müssen sie zu interpretieren. Wenn Sie Begriffe wie Substitutionsgruppen, complex Erweiterung, Chamäleon-Schemata und namesapces ignorieren, sollten Sie in der Lage sein, die SOM maßen leicht zu navigieren.

Sie müssen neben herauszufinden, wo Sie im XML-Dokument mit Bezug auf Ihr Schema sind. Sobald Sie bekannt waren Sie in der SOM sind, können Sie dann beginnen die verfügbaren Optionen zu erarbeiten.

Um dies zu tun, richtig ist 1000' von Codezeilen und 4-12 Mann Wochen Arbeit. Sie können in der Lage sein, etwas Grundsätzliches zusammen in ein paar Wochen zu bekommen?

Andere Tipps

Ich habe meine Augen wurde Blutungen mit der MSDN-Dokumentation, und ich glaube, ich habe einen Duft aufgenommen. Laden Sie ein Schema XmlSchema.Read verwenden und kompilieren Sie es. Die Elemente Eigenschaft wird eine Sammlung der ‚Top-Level‘ Elemente enthalten. Sie werden den qualifizierten Namen des Root-Elements oder etwas hart codieren müssen. das ist es dann. Ich habe nicht gefunden, wie die ‚Inhalte‘ zu finden unter einem bestimmten Schema-Elemente vor.

Edit: Ich habe einige weitere Wege gefunden zu gehen, aber es ist immer noch nicht klar. XmlSchemaElements haben eine Schematyp-Eigenschaft. Dies ist entweder einfach oder komplex. Komplexe Typen in XML-Schema kann Attribute haben, Sequenzen, Gruppen usw. Die Sequenzen eine Eigenschaft namens Partikel haben, die ein Element sein kann. Und der Zyklus wiederholt. Aber ich denke, der schwierige Teil bei der Umsetzung zu machen wäre sicher, dass Sie alle möglichen Fälle abdecken (einfachen Typen, komplexen Typ mit dem Attribute, komplexen Typ mit Attributen und Elementen, Erweiterungen, der ganze Kram).

Edit: Verwenden Sie das Element Eigenschaft XmlSchema Objekt eine XmlSchemaElement zu bekommen. Verwenden Sie das Schema Unterkunft XmlSchemaElement einfachen oder komplexen Typen zu erhalten. Verwenden Sie das Attribut Eigenschaft XmlSchemaComplexType Attribute oder ContentModel zu bekommen ‚einfachen Inhalt‘ / ‚komplexe Inhalte‘ oder Particle zu bekommen ‚Sequenz‘ / ‚Wahl‘ / ‚alle‘ zu bekommen. Im Grunde eine Menge von Eigenschaften Reisen nach unten und Typen Überprüfung und Casting-Objekte links und rechts und alle möglichen Anordnungen von XSD-Objekte überprüfen. Um eine Bibliothek zu erstellen wäre langwierig und umständlich und fehleranfällig. Und das ist mit XML-Schema, mit dtds ich nicht einmal denken beginnen will. Wow, XML-Schemas sind notwendig, aber warum haben sie sein, so böse.

Sie können Drittanbieter-Tool wie XMLSPY verwenden ( Link ). es wird einen Dummy-xml von XSD oder umgekehrt machen.

Ein wirklich Kreisverkehr (aber kostenlos), wie Sie mit .NET-Tool tun könnten, die auf Ihrem Computer vorhanden wären xsd.exe ( link ) das Unternehmen zu generieren Objekte, die das Schema mit definiert wie folgt vor:

xsd /classes /language:CS XSDSchemaFile.xsd

Wenn Sie dann die Objekte haben, sie in ein Projekt laden und sie serialisiert werden soll. Sie können Eigenschaften bevölkern und so, wenn Sie einige Dummy-Daten hinzufügen möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top