Sto usando XML Data Binding Wizardin Delphi XE2. Lo schema ha tag obbligatori di questo 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>
Il problema è che se non aggiungo alcun elemento, ad esempio, al Values-group, non ci sarà alcun <Values>-tag e il file XML fallirà la convalida rispetto al file XSD. Questo probabilmente non sarebbe un problema se l'interfaccia fornisse un metodo per "aggiungere" il Valuestag.
Esiste un modo standard per gestirlo o sto utilizzando il codice generato in modo non corretto?
In parole povere , c'è alcun modo, work-around o in altro modo, utilizzando il codice dal Data Binding Wizard, per produrre la seguente XML(che è ciò che è necessario per convalidare utilizzando lo schema di cui sopra, quando non ci sono i figli), dato HeaderType, ValuesTypee EventsTypesono di complexType :
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
(So che ci sono altri problemi simili, come il codice generato <xs:sequence>non applicando l'ordine corretto nel XMLfile finale , ma almeno per quello, c'è una soluzione semplicemente inserendo i bambini nell'ordine giusto. Penso ancora sarebbe bello se Embarcaderofornisse un'interfaccia completa, che tenga conto di più di queste funzionalità.)
TXMLValuesType.AfterConstructionlegge RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;quindi la raccolta di elementi di valore (sotto il tag Values genitore), che è ciò che rende così difficile creare il tag Values vuoto. La Value-list vuota ti impedirà di forzare SaveToFilea produrre il <Values />tag