使用Delphi XML数据绑定向导时不存在必需的标记



我在Delphi XE2中使用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标记的方法,那么这可能不会成为问题。

是否有标准的处理方法,或者我是否正确地使用了生成的代码?

简单地说,如果HeaderTypeValuesTypeEventsType是complexType:,是否有任何方法、变通方法或其他方法,使用Data Binding Wizard中的代码来生成以下XML(当没有子节点时,使用上述模式验证所需的内容)

<MyReport>
<Header />
<Values />
<Events />
</MyReport> 

(我知道还有其他类似的问题,比如<xs:sequence>生成的代码没有在最终的XML-文件中强制执行正确的顺序,但至少对于这个问题,可以通过简单地按正确的顺序插入子级来解决。我仍然认为,如果Embarcadero能提供一个完整的接口,将更多这些功能考虑在内,那就太好了。)

不一定能理解,但也许你想要的是:use="optional">

<xs:element name="MyReport" type="MyReportType" />
<xs:complexType name="MyReportType">
<xs:all>
<xs:element name="Header" type="HeaderType" use="optional" />
<xs:element name="Values" type="ValuesType" use="optional" />
<xs:element name="Events" type="EventsType" use="optional" />
</xs:all>
</xs:complexType>

告诉我是否可以。

最新更新