2009-04-30 4 views
5

Ich würde gerne die beste Methode zur Lösung dieses Problems wissen: Ich möchte eine leere Vorlage Xml aus einem XML-Schema erstellen. Alle erforderlichen Elemente und Attribute würden erstellt und ihre Werte wären alle leere Zeichenfolgen.Erstellen einer XML-Datei von Xsd in .NET

Der nächste Schritt besteht darin, festzustellen, welche untergeordneten XML-Knoten ein bestimmter Knoten haben könnte. z.B. Ich würde einen Knoten auswählen, hat minOccurs = "0", maxOccurs = "unbounded" für eines seiner Kinder. Ich würde in der Lage sein, alles über dieses Kind, seine Attribute, seinen Namen, seinen Werttyp, etc. zu bestimmen.

Um mehr Kontext auf der Situation zu geben, arbeite ich an einem Werkzeug, das Benutzern erlaubt, XML-Dateien in a benutzerfreundlichere Einstellung. Zum Beispiel könnten sie dem Knoten 'account db' ein neues Konto hinzufügen, und sie würden sehen, dass der einzige verfügbare Knoten ein Kontenknoten ist. Wenn sie dann versuchen, dem Account-Knoten untergeordnete Elemente hinzuzufügen, wären die Optionen name node (erforderlich), password node (erforderlich), settings node (optional) usw. Wie ermittle ich programmgesteuert, für welche untergeordneten Elemente der Account-Knoten verfügbar ist es und was sind die Attribute und Einstellungen auf diesen Kindern?

Dies ist in C# 2.0 mit .NET 2.0.

Zusammenfassend, welche Klassen verwende ich, um ein Schema zu lesen und zu analysieren, um nützliche Informationen zum Erstellen eines XML zu erhalten? In meiner Naivität hatte ich die Hoffnung, dass, da xsd in sich selbst XML war, es eine Art von DOM-Modell geben würde, das ich durchqueren könnte.

ich dies möchte mein Programm, so dass keine Verwendung von externen Tools wie OxygenXml, VS, xsd.exe usw.

+1

mögliche Duplikate von [Gibt es eine Klasse, um ein XML-Beispieldokument aus dem XSD-Schema in .NET zu generieren] (http://stackoverflow.com/questions/41674/is-there-a-class-to-generate-a -sample-xml-document-from-xsd-schema-in-net) –

Antwort

1

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

Wir haben etwas sehr ähnliches an einem Projekt gemacht, an dem wir vor einiger Zeit gearbeitet haben. Etwas zu produzieren, das die meiste Zeit funktioniert, ist eine Menge Arbeit, etwas zu produzieren, das die ganze Zeit funktioniert, ist eine Menge Arbeit!

Grundsätzlich müssen Sie die XSD laden (die XmlSchema-Objekte in .net können Sie dies tun). Aber das SOM-Objektmodell, das sie zur Verfügung stellen, ist sehr roh, also müssen Sie ziemlich viel Arbeit machen, um es zu interpretieren. Wenn Sie Konzepte wie Substitutionsgruppen, complexType-Erweiterungen, Chamäleon-Schemata und Namesapces ignorieren, sollten Sie in der Lage sein, relativ einfach durch das SOM zu navigieren.

Als nächstes müssen Sie herausfinden, wo Sie im XML-Dokument mit Bezug auf Ihr Schema sind. Sobald Sie wissen, dass Sie in der SOM sind, können Sie beginnen, die verfügbaren Optionen zu erarbeiten.

Um dies richtig zu tun, ist 1.000 'Zeilen Code und 4-12 Mann Wochen Arbeit. Vielleicht können Sie in ein paar Wochen etwas Grundlegendes zusammenbekommen?

+0

Ja, das ist es, was ich entdecke, als ich damit anfing. Das Erstellen einer Bibliothek würde in der Tat viele Stunden dauern. Ich habe mich damit abgefunden, das XmlSchema-Objekt zu durchlaufen und die Informationen, die ich zu diesem Zeitpunkt brauchte, auszuwählen. – ipwnponies

0

können Sie ein Drittanbieter-Tool wie XMLSPY (link) verwenden beschränkt werden. Es wird ein Dummy-XML von Xsd oder umgekehrt.

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

xsd /classes /language:CS XSDSchemaFile.xsd 

Wenn Sie die Objekte dann haben, laden Sie sie in ein Projekt und serialisieren Sie sie. Sie können Eigenschaften und dergleichen hinzufügen, wenn Sie Dummy-Daten hinzufügen möchten.

+0

Entschuldigung dafür, dass ich dies nicht erwähnt habe, ich möchte, dass dies ausschließlich in meinem Programm geschieht. Die wichtigste Information, die ich wollte, war eine Methode oder Klasse, die es mir erlauben würde, das Schema für jede Information zu analysieren, die ich brauche. – ipwnponies

1

Ich blutete meine Augen mit den MSDN-Dokumenten aus und ich glaube, ich habe einen Duft aufgenommen. Laden Sie ein Schema mit XmlSchema.Read und kompilieren Sie es. Die Elements-Eigenschaft enthält eine Sammlung der Elemente der obersten Ebene. Sie müssen den qualifizierten Namen des Root-Elements oder etwas fest codieren. Dann ist es das. Ich habe noch nicht herausgefunden, wie man den 'Inhalt' unter einem bestimmten Schema-Element findet.

Edit: Ich habe einige weitere Wege gefunden, aber es ist immer noch nicht kristallklar. XmlSchemaElements haben eine Schematyp-Eigenschaft. Dies ist entweder einfach oder komplex. Komplexe Typen im XML-Schema können Attribute, Sequenzen, Gruppen usw. haben. Die Sequenzen haben eine Eigenschaft namens particle, die ein Element sein kann. Und der Zyklus wiederholt sich. Aber ich denke, der schwierige Teil bei der Implementierung wäre, sicherzustellen, dass Sie alle möglichen Fälle abdecken (einfacher Typ, komplexer Typ mit Attribut, komplexer Typ mit Attribut und Elementen, Erweiterungen, der ganze Shebang).

Bearbeiten: Verwenden Sie die Element-Eigenschaft des XmlSchema-Objekts, um ein XmlSchemaElement abzurufen. Verwenden Sie die SchemaType-Eigenschaft des XmlSchemaElement, um einen einfachen oder komplexen Typ zu erhalten. Verwenden Sie die Attributeigenschaft des XmlSchemaComplexType, um Attribute oder ContentModel zu erhalten, um "einfachen Inhalt"/"komplexen Inhalt" zu erhalten, oder Particle, um "Sequenz"/"Auswahl"/"alle" zu erhalten.Im Grunde eine Menge von Reisen Eigenschaften und prüfen Arten und Gießen Objekte links und rechts und überprüft alle möglichen Anordnungen von xsd-Objekten. Eine Bibliothek zu erstellen wäre lang und umständlich und fehleranfällig. Und das ist mit XML-Schemas, mit dtds möchte ich nicht einmal anfangen zu denken. Wow, XML-Schemas sind notwendig, aber warum müssen sie so böse sein?