xml - 使用 Delphi XML 数据绑定(bind)向导时不存在必需的标记

标签 xml delphi xsd delphi-xe2

我正在使用 XML Data Binding WizardDelphi XE2 . 该架构需要这种类型的标签:

<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> -tag,XML 文件将无法通过 XSD 验证.如果接口(interface)提供了“添加”Values 的方法,这可能不会成为问题。 -标签。

是否有处理此问题的标准方法,或者我是否错误地使用了生成的代码?

简单地说,是否有任何方法,变通或其他方法,使用来自 Data Binding Wizard 的代码, 产生以下 XML (这是在没有子节点时使用上述模式进行验证所需要的),给定 HeaderType , ValuesTypeEventsType是复杂类型:

<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>

告诉我是否可以。

关于xml - 使用 Delphi XML 数据绑定(bind)向导时不存在必需的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12674592/

相关文章:

java - 使用 XSLT : how to exclude the XML version? XML 到 CSV

vba - 无法将字符串从 VBA (Excel) 传递到我的 COM 对象

java - 如何在不使用 JAXB 的情况下以编程方式创建 XSD 文件和 XML?

java - 基于给定 XSD 文件将 Java 对象转换为 XML 时出现问题

xml - 可以xs :any be in a xs:all element in XSD?

java - xml 中的子节点名称

php - 响应XML包含 “2000 ”和 “20a0”字符

使用简单的开关读取和写入 xml 或 json 的 Java 库

delphi - 如何知道为什么调用 'OnCloseQuery' - MDI 子关闭或应用程序关闭?

delphi - madExcept,获取当前堆栈的顶部