我正在使用Delphi XE2中的XML数据绑定向导(XML Data Binding Wizard)。 模式具有此类型的必需标记:
<xs:element name="MyReport" type="MyReportType" />
<xs:complexType name="MyReportType">
<xs:all>
<xs:element name="Header" type="HeaderType" />
<xs:element name="Values" type="ValuesType" />
<xs:element name="Events" type="EventsType" />
</xs:all>
</xs:complexType>
问题在于如果我不向例如Values
组添加任何元素,则不会出现<Values>
标记,而XML文件将无法通过对XSD
的验证。如果该接口提供了“添加”Values
标记的方法,则可能不会有问题。处理这个问题是否有标准化的方法,或者我是否不正确地使用了生成的代码?
简而言之,是否有任何方法、变通方法或其他方式,使用来自
Data Binding Wizard
的代码,以产生以下XML
(当没有子节点时需要验证使用上述模式),假设HeaderType
、ValuesType
和EventsType
都是complexType类型:<MyReport>
<Header />
<Values />
<Events />
</MyReport>
(我知道还有其他类似的问题,比如由<xs:sequence>
生成的代码不能强制执行最终XML
文件中的正确顺序,但至少对于这个问题,可以通过简单地按正确顺序插入子元素来解决。我仍然认为如果Embarcadero
提供一个完整的界面,考虑到更多这些特征将是不错的。)
TXMLValuesType.AfterConstruction
的代码如下:RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;
因此,值项的集合(在父 Values 标记下)存在,这就是使得创建空的 Values 标记变得如此困难的原因。空的 Value 列表将有效地阻止您强制SaveToFile
生成<Values />
标记。 - Randomeister