Używam XML Data Binding Wizardin Delphi XE2. Schemat wymaga tagów tego typu:
<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>
Problem w tym, że jeśli nie dodam żadnych elementów np. Do Values-group, to nie będzie <Values>-tag, a plik XML nie przejdzie walidacji względem XSD. Prawdopodobnie nie stanowiłoby to problemu, gdyby interfejs udostępniał metodę „dodawania” Values-tagu.
Czy istnieje standardowy sposób radzenia sobie z tym, czy też używam wygenerowanego kodu nieprawidłowo?
Mówiąc prościej , jest tam jakikolwiek sposób obejścia lub w inny sposób, wykorzystując kod z Data Binding Wizard, aby produkować następujące XML(czyli to, co jest potrzebne, aby potwierdzić za pomocą powyższego schematu, gdy nie ma węzły potomne), biorąc pod uwagę HeaderType, ValuesTypea EventsTypesą complexType :
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
(Wiem, że istnieją inne podobne problemy, takie jak kod generowany przez <xs:sequence>nie wymuszanie właściwej kolejności w końcowym XMLpliku, ale przynajmniej w tym przypadku można obejść ten problem, po prostu wstawiając dzieci we właściwej kolejności. Nadal uważam, że byłoby miło, gdyby Embarcaderoudostępniono kompletny interfejs, który uwzględnia więcej tych funkcji).
TXMLValuesType.AfterConstructionodczytu, RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;więc istnieje kolekcja elementów Value (pod nadrzędnym tagiem Values), co sprawia, że tak trudno jest utworzyć pusty tag Values. Pusta lista wartości skutecznie powstrzyma cię przed zmuszaniem SaveToFiledo tworzenia <Values />-tagu