2010-05-03 14 views
6

Ich habe ein einfaches Schema, in dem ich sowohl minOccurs als auch maxOccurs auf 1 deklariere. Wenn ich die XSD.exe ausführen, um eine C# -Klasse zu generieren und die Klasse im Code zu konsumieren; Das Feld wird nicht als obligatorisch erzwungen. Fehlt ein zusätzlicher Schritt? Oder sind die mit XSD.exe generierten Klassen keine Pflichtfelder?XSD.exe erzwingt nicht minOccurs

Alle Vorschläge oder Einblicke werden hilfreich sein.

Antwort

0

Sie haben Recht, dass XSD.EXE Vorkommnisanforderungen nicht erzwingt. Dies ist wie vorgesehen.

7

Wie das Xml/infer Schema-Tool in Visual Studio habe ich, wenn ich XSD.exe benutzt habe, einen Teil des generierten Codes repariert. XSD.exe ist eine gute Annäherung, aber es funktioniert nicht vollständig.

Die minOccurs/maxOccurs 'bug' ist auf MSDN dokumentiert.

Wenn Quellcode von einem Dokument XML-Schema zu erzeugen, ignoriert Xsd.exe die minOccurs zum < Wahl angewendet attribute>, < sequence>, < Gruppe>, < all>, und < any> Elemente.

für das Element Xsd.exe ignoriert die minOccurs Attribut, wenn der Wert des maxOccurs Attribut größer als 1, oder unbeschränkt ist. In diesem Fall erzeugt das Werkzeug ein Array von dem Typ, der dem XSD-Datenformat entspricht. Xsd.exe verwendet den Wert des Attributs maxOccurs, um zu bestimmen, ob eine einzelne Instanz oder ein Array erstellt werden soll.

für das Element Xsd.exe ignoriert auch die minOccurs Attribut, wenn es auf einen Datentyp-Schema angewandt wird, die Referenztyp einer Framework umwandelt.

Erst wenn alle folgenden Bedingungen erfüllt sind tut Xsd.exe den Wert des minOccurs-Attribut verwenden:

Das Element beteiligt ist.

Das Attribut maxOccurs gibt eine Einzelinstanz vor.

Der Datentyp wird in einen Wert konvertiert.

1

Wie würden Sie eine willkürliche Minoccurs in Code erzwingen? Eine Art von Behauptungen? Ich denke, Sie können nur "Nicht-nullable single instant" (1: 1) nicht Nullable-Array (1: viele) und ihre NULL-zulässigen Äquivalente (0; 1) und (0: viele)

zuordnen