Estoy usando el XML Data Binding Wizard
in Delphi XE2
. El esquema tiene etiquetas requeridas 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, por ejemplo, al Values
-grupo, no habrá <Values>
-etiqueta 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 Values
etiqueta -et.
¿Existe una forma estándar de manejar esto o estoy usando el código generado incorrectamente?
En pocas palabras , ¿hay alguna forma, alternativa o de otra manera, usando el código de Data Binding Wizard
, para producir lo siguiente XML
(que es lo que se necesita para validar usando 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 al <xs:sequence>
no imponer el orden correcto en el XML
archivo final , pero al menos para ese, hay una solución simplemente insertando los niños en el orden correcto. Sigo pensando Sería bueno si Embarcadero
proporcionara una interfaz completa, que tenga en cuenta más de estas características).
TXMLValuesType.AfterConstruction
lee RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;
para que exista la colección de elementos de valor (bajo la etiqueta de valores principal), que es lo que hace que sea tan difícil crear la etiqueta de valores vacía. La lista de valores vacía evitará que se obligue SaveToFile
a producir la <Values />
etiqueta