我在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
标记的方法,那么这可能不会成为问题。
是否有标准的处理方法,或者我是否正确地使用了生成的代码?
简单地说,如果HeaderType
、ValuesType
和EventsType
是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>
告诉我是否可以。