2010-05-03 4 views
6

J'ai un schéma simple où je déclare minOccurs et maxOccurs à 1. Lorsque je lance XSD.exe pour générer une classe C# et consommer la classe dans le code; le champ n'est pas obligatoire comme obligatoire. Y a-t-il une étape supplémentaire manquante? ou les classes générées en utilisant XSD.exe ne sont-elles pas des champs obligatoires?XSD.exe n'applique pas minOccurs

des suggestions ou un aperçu seront utiles.

Répondre

0

Vous avez raison de dire que XSD.EXE n'applique pas les exigences d'occurrence. C'est comme prévu.

7

Comme l'outil de schéma Xml/infer dans Visual Studio, chaque fois que j'ai utilisé XSD.exe, j'ai corrigé une partie du code généré. XSD.exe fait une bonne approximation mais cela ne fonctionne pas entièrement.

Le minOccurs/maxOccurs 'bug' est documenté sur MSDN.

Lors de la génération du code source à partir d'un document de schéma XML , Xsd.exe ignore les minOccurs attribut appliquées au choix <>, < séquence>, un groupe <>, < all>, et < quels> éléments.

Pour l'élément, Xsd.exe ignore les attributs minOccurs si la valeur de l'attribut maxOccurs est supérieur à 1, ou bornes. Dans ce cas , l'outil produit un tableau de du type correspondant au type de données XSD . Xsd.exe utilise la valeur de l'attribut maxOccurs pour déterminer si produire une instance unique ou un tableau.

Pour l'élément, Xsd.exe ne tient pas compte aussi les minOccurs attribuent si elle est appliquée à un type de données de schéma qui se transforme en un type de référence .NET Framework .

uniquement lorsque toutes les conditions suivantes sont vraies -t Xsd.exe utilise la valeur de l'attribut minOccurs:

L'élément est impliqué. L'attribut maxOccurs dicte une instance unique .

Le type de données est converti en un type de valeur .

1

Comment imposeriez-vous un minoccurs arbitraire dans le code? Une sorte d'affirmation? Je suppose que vous ne pouvez mapper à "Non-nullable single instance" (1: 1) tableau non-nullable (1: many) et leurs équivalents nullable (0; 1), et (0: many)

Questions connexes