Saya menggunakan XML Data Binding Wizard
dalam Delphi XE2
. Skema memerlukan tag jenis ini:
<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>
Masalahnya adalah jika saya tidak menambahkan elemen apa pun ke misalnya Values
-group, tidak akan ada <Values>
-tag, dan file XML akan gagal validasi terhadap XSD
. Ini mungkin tidak akan menjadi masalah jika antarmuka menyediakan metode untuk "menambahkan" Values
-tag.
Apakah ada cara standar untuk menangani ini, atau apakah saya menggunakan kode yang dibuat dengan benar?
Sederhananya , apakah ada setiap cara, kerja-sekitar atau sebaliknya, menggunakan kode dari Data Binding Wizard
, untuk menghasilkan berikut XML
(yang adalah apa yang dibutuhkan untuk memvalidasi menggunakan skema di atas ketika tidak ada node anak), diberikan HeaderType
, ValuesType
dan EventsType
yang dari complexType :
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
(Saya tahu ada masalah serupa lainnya, seperti kode yang dihasilkan dengan <xs:sequence>
tidak memberlakukan urutan yang benar di akhir XML
-file, tapi setidaknya untuk yang satu itu, ada penyelesaian dengan hanya memasukkan anak-anak dalam urutan yang benar. Saya masih berpikir alangkah baiknya jika Embarcadero
menyediakan antarmuka lengkap, yang mempertimbangkan lebih banyak fitur ini.)
TXMLValuesType.AfterConstruction
membaca RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;
sehingga koleksi Value-items (di bawah tag induk Values) ada, yang membuat sangat sulit untuk membuat tag Values yang kosong. Daftar-Nilai yang kosong akan secara efektif menghentikan Anda untuk memaksa SaveToFile
memproduksi <Values />
-tag