Używam XML Data Binding Wizard
in 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
, ValuesType
a EventsType
są 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 XML
pliku, 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 Embarcadero
udostępniono kompletny interfejs, który uwzględnia więcej tych funkcji).
źródło
TXMLValuesType.AfterConstruction
odczytu,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 zmuszaniemSaveToFile
do tworzenia<Values />
-taguOdpowiedzi:
Nie jestem pewien, czy rozumiesz, ale może to, czego szukasz, to: use = "optional"
Powiedz mi, czy wszystko w porządku.
źródło