Estou usando o XML Data Binding Wizard
em Delphi XE2
. O esquema requer tags deste 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>
O problema é que se eu não adicionar nenhum elemento, por exemplo, ao Values
-group, não haverá <Values>
-tag e o arquivo XML falhará na validação do XSD
. Isso provavelmente não seria um problema se a interface estivesse fornecendo um método para "adicionar" a Values
-tag.
Existe uma maneira padrão de lidar com isso ou estou usando o código gerado incorretamente?
Simplificando , há qualquer forma, o trabalho-around ou de outra forma, usando o código da Data Binding Wizard
, para produzir o seguinte XML
(que é o que é necessário para validar usando o esquema acima, quando não há nós filhos), dada HeaderType
, ValuesType
e EventsType
são de complexType :
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
(Eu sei que há outros problemas semelhantes, como o código gerado por <xs:sequence>
não impor a ordem correta no XML
-file final , mas pelo menos para aquele, há uma solução alternativa simplesmente inserindo os filhos na ordem certa. Ainda acho seria bom se Embarcadero
fornecesse uma interface completa, que levasse mais desses recursos em consideração.)
TXMLValuesType.AfterConstruction
lê RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;
para que a coleção de itens-valor (sob a tag-valores-pai) exista, o que torna tão difícil criar a tag-Values vazia. A lista de valores vazia impedirá você de forçar SaveToFile
a produção da <Values />
-tag