xml delphi xsd delphi-xe2

Las etiquetas necesarias no están presentes cuando se usa Delphi XML Data Binding Wizard



xsd delphi-xe2 (1)

Estoy usando el XML Data Binding Wizard en Delphi XE2. El esquema ha requerido etiquetas de este tipo:

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

El problema es que si no agrego ningún elemento a, por ejemplo, el grupo de valores, no habrá <Values> -tag, y el archivo XML fallará la validación contra el XSD. Esto probablemente no sería un problema si la interfaz proporcionara un método para "agregar" la etiqueta de valores.

¿Hay una forma estándar de manejar esto, o estoy usando el código generado correctamente?

En pocas palabras , ¿hay alguna manera de evitar el uso del código del Asistente de enlace de datos para producir el siguiente XML (que es lo que se necesita para validar utilizando el esquema anterior cuando no hay nodos secundarios), dado HeaderType , ValuesType y EventsType son de complexType:

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

(Sé que hay otros problemas similares, como el código generado por <xs:sequence> no impone el orden correcto en el archivo XML final, pero al menos para eso, hay una solución alternativa simplemente insertando los elementos secundarios en el archivo XML). orden correcto. Sigo pensando que sería bueno que Embarcadero proporcione una interfaz completa, que tenga en cuenta más de estas características).


No estoy seguro de entender, pero tal vez lo que está buscando es: 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>

Dime si está bien.