Использование перечислений XML с помощью Delphi XML Binding Data Wizard - PullRequest
6 голосов
/ 22 января 2010

У меня есть схема 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, - это поле, которое принимает перечисление, которое затем преобразуется в соответствующую ему строку при генерации XML, но это поле является обычной строкой.

Ответы [ 2 ]

5 голосов
/ 22 января 2010

Что вы можете сделать, это создать свой собственный перечисляемый тип с теми же строковыми константами, что и имена, и использовать модуль TypInfo с функциями GetEnumValue и GetEnumString. Это позволяет вам добавлять к именам несколько строчных букв, как в другом коде Delphi:

Value :=  TMyEnum( GetEnumValue( typeinfo( TMyEnum ), Prefix + AString )  )
2 голосов
/ 23 января 2010

Мастер привязки данных XML не может делать то, что вам нужно.

Причина в том, что перечисления в XSD несовместимы с идентификаторами delphi, поскольку они:

  1. может содержать символы, несовместимые с идентификатором Delphi
  2. чувствительны к регистру

В основном перечисления XSD являются просто строками с ограниченными значениями.

См. спецификации перечисления и пример .

Оба явно несовместимы с типами перечисления Delphi.

Редактировать: 20100125 - Атрибуты Delphi

Вот интересный вопрос о том, как далеко вы могли бы пойти с новым атрибутом и поддержкой RTTI в Delphi 2010.

- jeroen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...