Saya menggunakan XML Data Binding Wizarddalam 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, ValuesTypedan EventsTypeyang 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 Embarcaderomenyediakan antarmuka lengkap, yang mempertimbangkan lebih banyak fitur ini.)
TXMLValuesType.AfterConstructionmembaca 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 SaveToFilememproduksi <Values />-tag