Estou usando o XML Data Binding Wizardem 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, ValuesTypee EventsTypesã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 Embarcaderofornecesse uma interface completa, que levasse mais desses recursos em consideração.)
TXMLValuesType.AfterConstructionlê 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 SaveToFilea produção da <Values />-tag