J'utilise le XML Data Binding Wizard
in 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
, ValuesType
et EventsType
sont 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 XML
fichier 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 Embarcadero
fournir une interface complète, qui prend en compte davantage de ces fonctionnalités.)
la source
TXMLValuesType.AfterConstruction
lectures deRegisterChildNode('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 forcerSaveToFile
à produire le<Values />
-tagRéponses:
Je ne suis pas sûr de comprendre, mais peut-être que ce que vous recherchez est: use = "optional"
Dis-moi si ça va.
la source