Tôi đang sử dụng XML Data Binding Wizard
trong Delphi XE2
. Lược đồ có các thẻ bắt buộc thuộc loại này:
<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>
Vấn đề là nếu tôi không thêm bất kỳ phần tử nào vào ví dụ Values
-group, thì sẽ không có <Values>
-tag và tệp XML sẽ không xác thực được đối với XSD
. Điều này có lẽ sẽ không thành vấn đề nếu giao diện cung cấp một phương pháp để "thêm" thẻ Values
-tag.
Có cách tiêu chuẩn nào để xử lý vấn đề này không hay tôi đang sử dụng đúng mã đã tạo?
Một cách đơn giản , là có bất kỳ cách nào, công việc xung quanh hoặc cách khác, sử dụng mã từ Data Binding Wizard
, để sản xuất như sau XML
(đó là những gì cần thiết để xác nhận sử dụng sơ đồ trên khi không có nút con), được đưa ra HeaderType
, ValuesType
và EventsType
là của complexType :
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
(Tôi biết có những vấn đề tương tự khác, chẳng hạn như mã được tạo ra bằng cách <xs:sequence>
không thực thi thứ tự chính xác trong XML
-tệp cuối cùng , nhưng ít nhất đối với vấn đề đó, có một cách giải quyết bằng cách chỉ cần chèn các con theo đúng thứ tự. Tôi vẫn nghĩ sẽ rất tuyệt nếu Embarcadero
cung cấp một giao diện hoàn chỉnh, có tính đến nhiều tính năng hơn.)
TXMLValuesType.AfterConstruction
đọc RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;
để tồn tại bộ sưu tập Mục giá trị (dưới thẻ Giá trị gốc), đó là điều khiến việc tạo thẻ Giá trị trống rất khó. Danh sách giá trị trống sẽ ngăn bạn SaveToFile
tạo thẻ <Values />
-tag một cách hiệu quả