У меня есть XML-схема, которая использует перечисления, но когда я смотрю на сгенерированный объект XML в Delphi, ограничение перечисления было отброшено. Там какой-либо путь состоит в том, чтобы заставить Delphi генерировать перечисление и встраивать его в объект?
Отрывок XSD:
<xs:simpleType name="enumType" final="restriction">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="Each"/>
<xs:enumeration value="Units"/>
<xs:enumeration value="Area"/>
<xs:enumeration value="Payroll"/>
<xs:enumeration value="Sales"/>
<xs:enumeration value="TotalCost"/>
<xs:enumeration value="Other"/>
</xs:restriction>
</xs:simpleType>
То, что я ожидал бы видеть в Delphi, является полем, которое принимает перечисление, которое затем преобразовывается в, он - строка corresponing, когда XML сгенерирован, но то поле является просто обычной строкой.
Что вы можете сделать, это создать свой собственный перечисленный тип с теми же строковыми константами в качестве имени и используйте устройство Typinfo с функцией GetNUMValue и Getnumstring. Это позволяет вам префикнуть имена с несколькими строчными буквами, такими как в другом Code Delphi:
Value := TMyEnum( GetEnumValue( typeinfo( TMyEnum ), Prefix + AString ) )
Это невозможно для мастера связывания данных XML, чтобы сделать то, что вы хотите.
Причина в том, что перечисления в XSD не совместимы с идентификаторами Delphi, поскольку они:
в основном XSD-перечисления, - это просто строки с ограниченным значения.
См. Спецификации перечисления и пример .
Оба явно несовместимы с типами перечисления Delphi.
Редактировать: 20100125 - Атрибуты Delphi
Вот интересный вопрос о том, как далеко вы можете пойти с новым атрибутом и поддержкой RTTI в Delphi 2010.
- Jeroen