J'utilise le XML Data Binding Wizardin Delphi XE2. Le schéma a requis des balises de ce type:
<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>
Le problème est que si je n'ajoute aucun élément, par exemple au Values-group, il n'y aura pas de <Values>-tag, et le fichier XML échouera à la validation par rapport au XSD. Ce ne serait probablement pas un problème si l'interface fournissait une méthode pour "ajouter" le Values-tag.
Existe-t-il un moyen standard de gérer cela ou est-ce que j'utilise le code généré correctement?
En termes simples , existe-t-il un moyen, de contournement ou autre, en utilisant le code du Data Binding Wizard, pour produire ce qui suit XML(ce qui est nécessaire pour valider à l'aide du schéma ci-dessus lorsqu'il n'y a pas de nœuds enfants), étant donné HeaderType, ValuesTypeet EventsTypesont de type complexe :
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
(Je sais qu'il y a d'autres problèmes similaires, comme le code généré en n'appliquant <xs:sequence>pas le bon ordre dans le XMLfichier final , mais au moins pour celui-là, il y a une solution en insérant simplement les enfants dans le bon ordre. Je pense toujours ce serait bien de Embarcaderofournir une interface complète, qui prend en compte davantage de ces fonctionnalités.)
TXMLValuesType.AfterConstructionlectures de RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;sorte que la collection d'éléments de valeur (sous la balise Values parent) existe, ce qui rend si difficile la création de la balise Values vide. La liste de valeurs vide vous empêchera effectivement de forcer SaveToFileà produire le <Values />-tag