ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
1389
1389
EMPFEHLEN
-
13.12.11 09:32 #1
- Registriert seit
- Apr 2007
- Beiträge
- 153
Hallo,
wenn ich ein XML-Schema erstelle und einige Elemente mit minoccurs="1" definiere und für nicht optionale Attribute einen Default-Wert definiere, ist es dann möglich aus diesem XML-Schema eine XML-Instanz zu erstellen? Also im Prinzip als wenn ich von einer Klasse den Default-Konstruktor aufrufe.
Die Elemente mit minOccures="1" sowie die Attribute für die ein Default-Wert definiert wurde sollen dann in dieser Instanz bereits vorhanden sein.
Gibt es hierfür eine Bibliothekesfunktion oder muss ich das händisch machen und das XML-Schema durchrödeln ?
-
14.12.11 19:21 #2
- Registriert seit
- Dec 2011
- Beiträge
- 30
So du unter Windows mit .NET 2.0 oder neuer arbeitest, könnte dich http://msdn.microsoft.com/en-us/library/aa302296.aspx interessieren, damit kannst du zu einem Schema oder einer Menge von Schemata ein Beispieldokument generieren.
-
26.01.12 08:05 #3
- Registriert seit
- Apr 2007
- Beiträge
- 153
Hallo,
ich habe mal versucht mit .NET (C#) aus einer XmlSchema Instanz ein XmlDocument zu erstellen.
Dabei wäre dies die Methoden-Signatur.
Code :1
public static XmlDocument newInstance(XmlSchema schema);
Dabei habe ich nach einer möglichkeit gesucht, das XmlSchema rekursiv beginnend beim Element, welches das Root-Element darstellt elementweise abzuarbeiten.
Dabei hab ich mir das so vorgestellt, dass ich bei dem xs:element beginne welches das Root-Element beschreibt und dann die Kind-Elemente und deren Kindelemente rekursiv abarbeite. Wenn ein xs:element die Eigenschaft minOccurres="n" (n >= 1) hat erstelle ich diese Elemente im XmlDocument und vergebe ggfs. noch Default-Werte für die Attribute.
Aber ich bin nicht mal soweit gekommen, dass ich das Root-Element im XmlSchema gefunden habe. Ausserdem habe ich immer nur die Parent-Eigenschaft gefunden, jedoch nie eine Childs Eigenschaft ...
Beim Recherchen habe ich oft etwas über die Compile Methode gelesen und dass diese ein logisches Schema erstellt. Bei mir hatte die Compile Methode jedoch scheinbar keinen erkennbaren Effekt.Geändert von Tikonteroga (26.01.12 um 08:07 Uhr)
-
26.01.12 15:14 #4
- Registriert seit
- Dec 2011
- Beiträge
- 30
Wenn du das Sample von http://msdn.microsoft.com/en-us/library/aa302296.aspx benutzt, ergibt sich folgende Nutzungsmöglichkeit:
Mit einem BeispielschemaCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Linq; using System.Xml.Schema; using Microsoft.Xml.XMLGen; namespace XmlInstanceGenTest1 { class Program { static void Main(string[] args) { XmlSchemaSet schemas = new XmlSchemaSet(); schemas.Add(null, "../../XMLSchema1.xsd"); XmlSampleGenerator gen = new XmlSampleGenerator(schemas, new XmlQualifiedName("root", "http://example.com/ns1")); XDocument doc = new XDocument(); using (XmlWriter xw = doc.CreateWriter()) { gen.WriteXml(xw); } doc.Save(Console.Out); Console.WriteLine(); gen.MaxThreshold = 1; doc = new XDocument(); using (XmlWriter xw = doc.CreateWriter()) { gen.WriteXml(xw); } doc.Save(Console.Out); } } }
ergibt sich dann das ResultatCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/ns1" elementFormDefault="qualified"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="foo" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="bar" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
So du mit .NET 2.0 oder 3.0 arbeitest und nicht XDocument nutzen kannst oder willst, besteht natürlich auch die Möglichkeit, XmlDocument zu nutzen:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
<?xml version="1.0" encoding="ibm850"?> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.com/ns1"> <foo> <bar>bar1</bar> </foo> <foo> <bar>bar2</bar> </foo> <foo> <bar>bar3</bar> </foo> <foo> <bar>bar4</bar> </foo> <foo> <bar>bar5</bar> </foo> </root> <?xml version="1.0" encoding="ibm850"?> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.com/ns1"> <foo> <bar>bar1</bar> </foo> </root>
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
XmlSchemaSet schemas = new XmlSchemaSet(); schemas.Add(null, "../../XMLSchema1.xsd"); XmlSampleGenerator gen = new XmlSampleGenerator(schemas, new XmlQualifiedName("root", "http://example.com/ns1")); XmlDocument doc = new XmlDocument(); using (XmlWriter xw = doc.CreateNavigator().AppendChild()) { gen.WriteXml(xw); } doc.Save(Console.Out); Console.WriteLine(); gen.MaxThreshold = 1; doc = new XmlDocument(); using (XmlWriter xw = doc.CreateNavigator().AppendChild()) { gen.WriteXml(xw); } doc.Save(Console.Out);
Ähnliche Themen
-
Reflektionsfrage - Dynamisch Klassen instanzieren
Von H3llGhost im Forum JavaAntworten: 6Letzter Beitrag: 14.08.10, 12:11 -
Class aus String-Value instanzieren?
Von Marine-of-Hell im Forum JavaAntworten: 3Letzter Beitrag: 27.07.09, 12:12 -
Instanzieren von generischen Typen
Von xxsaikoxx im Forum JavaAntworten: 3Letzter Beitrag: 30.12.07, 11:14 -
Symbol aus Bibliothek instanzieren
Von Samy-Deluxe im Forum Flash PlattformAntworten: 1Letzter Beitrag: 26.06.06, 10:58 -
Oracle - Tabelle von einem Schema in ein anderes Schema verschieben
Von Plumpsi im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 15.09.04, 10:26





Zitieren
Login





