使用带有Delphi XML数据绑定向导的XML枚举

时间:2010-01-22 17:19:21

标签: xml delphi xsd

我有一个使用枚举的XML模式,但是当我在Delphi中查看生成的XML对象时,枚举限制已被删除。有没有办法让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 个答案:

答案 0 :(得分:5)

您可以做的是使用与名称相同的字符串常量创建自己的枚举类型,并使用单元TypInfo和函数GetEnumValue和GetEnumString。 这允许您使用一些小写字母为名称添加前缀,就像在其他Delphi代码中一样:

Value :=  TMyEnum( GetEnumValue( typeinfo( TMyEnum ), Prefix + AString )  )

答案 1 :(得分:2)

XML数据绑定向导无法执行您想要的操作。

原因是XSD中的枚举与delphi标识符不兼容,因为它们:

  1. 可以包含与Delphi标识符不兼容的字符
  2. 区分大小写
  3. 基本上,XSD枚举只是具有约束值的字符串。

    请参阅the enumeration specsan example

    两者都明显与Delphi枚举类型不兼容。

    编辑:20100125 - Delphi属性

    Here is an interesting question关于在Delphi 2010中使用新属性和RTTI支持的程度。

    - 的Jeroen