我有一个使用枚举的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时将其转换为相应的字符串,但该字段只是一个普通的字符串。
答案 0 :(得分:5)
您可以做的是使用与名称相同的字符串常量创建自己的枚举类型,并使用单元TypInfo和函数GetEnumValue和GetEnumString。 这允许您使用一些小写字母为名称添加前缀,就像在其他Delphi代码中一样:
Value := TMyEnum( GetEnumValue( typeinfo( TMyEnum ), Prefix + AString ) )
答案 1 :(得分:2)
XML数据绑定向导无法执行您想要的操作。
原因是XSD中的枚举与delphi标识符不兼容,因为它们:
基本上,XSD枚举只是具有约束值的字符串。
请参阅the enumeration specs和an example。
两者都明显与Delphi枚举类型不兼容。
编辑:20100125 - Delphi属性
Here is an interesting question关于在Delphi 2010中使用新属性和RTTI支持的程度。
- 的Jeroen