Ich benutze das XML Data Binding Wizard
in Delphi XE2
. Für das Schema sind Tags dieses Typs erforderlich:
<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>
Das Problem ist, dass, wenn ich zB der -group keine Elemente hinzufüge Values
, es kein <Values>
-tag gibt und die XML-Datei die Validierung gegen die nicht besteht XSD
. Dies wäre wahrscheinlich kein Problem, wenn die Schnittstelle eine Methode zum "Hinzufügen" des Values
-tags bereitstellen würde.
Gibt es eine Standardmethode, um damit umzugehen, oder verwende ich den generierten Code falsch?
Einfach ausgedrückt , gibt es eine Möglichkeit, das Problem zu umgehen oder auf andere Weise, indem der Code aus dem verwendet Data Binding Wizard
wird, um Folgendes zu erzeugen XML
(was zur Validierung unter Verwendung des obigen Schemas erforderlich ist, wenn keine untergeordneten Knoten vorhanden sind) HeaderType
, ValuesType
und EventsType
sind vom Typ complexType ::
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
(Ich weiß, dass es andere ähnliche Probleme gibt, wie den Code, der generiert wird, wenn <xs:sequence>
nicht die richtige Reihenfolge in der endgültigen XML
Datei erzwungen wird, aber zumindest für diese gibt es eine Problemumgehung, indem die Kinder einfach in der richtigen Reihenfolge eingefügt werden. Ich denke immer noch Es wäre schön, wenn Sie Embarcadero
eine vollständige Benutzeroberfläche bereitstellen würden, die mehr dieser Funktionen berücksichtigt.)
TXMLValuesType.AfterConstruction
Lesen, RegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;
damit die Sammlung von Wertelementen (unter dem übergeordneten Values-Tag) vorhanden ist, macht es so schwierig, das leere Values-Tag zu erstellen. Die leere Wert-Liste werden Sie effektiv verhindert , zwingt SaveToFile
das zu produzieren <Values />
-tag