2010-05-03 19 views
6

Tengo un esquema simple en el que declaro que minOccurs y maxOccurs pasan a 1. Cuando ejecuto XSD.exe para generar una clase C# y consumir la clase en código; el campo no se aplica como obligatorio. ¿Hay algún paso adicional que falta? o las clases generadas usando XSD.exe no son campos obligatorios?XSD.exe no impone minOccurs

cualquier sugerencia o idea será útil.

Respuesta

0

Tiene razón en que XSD.EXE no impone los requisitos de ocurrencia. Esto es como está diseñado.

7

Al igual que la herramienta Xml/inferir esquema en Visual Studio, cada vez que he usado XSD.exe he terminado reparando parte del código generado. XSD.exe hace una buena aproximación pero no funciona del todo.

El minOccurs/maxOccurs 'bug' está documentado en MSDN.

Al generar el código fuente de un documento de esquema XML , Xsd.exe ignora los minOcurrencias atributo aplican a la elección <>, < secuencia>, < grupo>, < todo>, y < cualquier> elementos.

Para el elemento, Xsd.exe ignora los minOccurs atributo si el valor del atributo maxOccurs es mayor que 1, o sin límites. En este caso , la herramienta produce una matriz de del tipo correspondiente al tipo de datos XSD . Xsd.exe utiliza el valor del atributo maxOccurs para determinar si se debe generar una sola instancia o una matriz.

Para el elemento, Xsd.exe también ignora el atributo minOccurs si se aplica a un tipo de datos de esquema que se convierte en un .NET Framework tipo referencia.

Sólo cuando todas las condiciones siguientes son verdaderas hace Xsd.exe utilizar el valor del atributo minOcurrencias:

El elemento está involucrado.

El atributo maxOccurs dicta una instancia única de .

El tipo de datos se convierte en un tipo de valor .

1

¿Cómo impondrías un minicurso arbitrario en el código? Algún tipo de aserciones? Supongo que solo se puede asignar a "matriz no nulable" (1: 1) matriz no nulo (1: muchos) y sus equivalentes que aceptan valores nulos (0; 1) y (0: muchos)

Cuestiones relacionadas