2010-05-03 2 views
6

У меня простая схема, где я объявляю как minOccurs, так и maxOccurs равным 1. Когда я запускаю XSD.exe для генерации класса C# и потребляю класс в коде; поле не применяется как обязательное. Есть ли еще какой-то дополнительный шаг? или классы, созданные с использованием XSD.exe, не являются обязательными?XSD.exe не применяет minOccurs

любые предложения или идеи помогут.

ответ

0

Вы правы, что XSD.EXE не применяет требования к возникновению. Это так же хорошо.

7

Как инструмент Xml/infer schema в visual studio, всякий раз, когда я использовал XSD.exe, я решил исправить некоторый сгенерированный код. XSD.exe делает хорошее приближение, но он не работает полностью.

minOccurs/maxOccurs 'bug' документально подтвержден на MSDN.

При генерации исходного кода из схемы документа XML , Xsd.exe игнорирует в MinOccurs атрибут применяется к < выбора>, < последовательность>, < группа>, < все>, и < любой> элементы.

Для элемента, Xsd.exe игнорирует атрибут MinOccurs, если значение атрибута MaxOccurs является больше 1, или неограниченной. В этом случае инструмент создает массив из типа, соответствующего типу XSD . Xsd.exe использует значение атрибута maxOccurs , чтобы определить , следует ли создать один экземпляр или массив.

Для элемента, Xsd.exe также игнорирует MinOccurs атрибут , если она применяется к типу данных схемы, который превращается в .NET Framework ссылочного типа.

Только тогда, когда выполняются все следующие условия истинны ли Xsd.exe использовать значение атрибута MinOccurs:

элемент участвует.

Атрибут maxOccurs определяет один экземпляр .

Тип данных преобразуется в значение .

1

Как бы вы применяли произвольные минокеры в коде? Какие-то утверждения? Я полагаю, что вы можете отобразить только массив с ненулевым одиночным экземпляром (1: 1) (1: много) и их эквиваленты с нулевым значением (0; 1) и (0: много)

Смежные вопросы