Sto usando XML Data Binding Wizard
in 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 Values
tag.
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
, ValuesType
e EventsType
sono 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 XML
file finale , ma almeno per quello, c'è una soluzione semplicemente inserendo i bambini nell'ordine giusto. Penso ancora sarebbe bello se Embarcadero
fornisse un'interfaccia completa, che tenga conto di più di queste funzionalità.)
TXMLValuesType.AfterConstruction
legge 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 SaveToFile
a produrre il <Values />
tag