ben me voor het eerst aan het verdiepen in de XML-functies van Delphi, en nu valt me bij mijn programma iets vreemds op. Ik gebruik de volgende (ingekorte XSD).
Wanneer ik deze XSD (de complete versie) door de XML Binding Wizard haal, maakt hij onder andere de volgende interfaces aan:
Er bestaan zoals in de xsd te zien is, meerdere regio's per regio, meerdere parts per regio en meerdere legs per part.
Maar... waarom krijg ik van de wizard geen IXMLLegList terug.
De volledige vorm van TXMLParts is:
De enige manier om nu te ontdekken hoeveel legs er in 1 part zitten in de index te verhogen tot ik eruit knal. Terwijl er als onderdeel bij de lists een mooie count-function bestaat.
Ik kan heel bijdehant natuurlijk handmatig een IXMLLegList en een TXMLLegList aanmaken, maar dan raak ik die waarschijnlijk kwijt zodra ik de XSD aanpas en opnieuw door de wizard haal.
Iemand een suggestie?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| <?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://www.borland.com/schemas/delphi/6.0/XMLDataBinding" elementFormDefault="qualified">
<xs:element name="Regio">
<xs:complexType>
<xs:sequence>
<xs:element ref="Regio" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Parts" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Long" type="xs:string" use="required" />
<xs:attribute name="Short" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="Parts">
<xs:complexType>
<xs:sequence>
<xs:element ref="Leg" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Leg">
<xs:complexType>
<xs:attribute name="item" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema> |
Wanneer ik deze XSD (de complete versie) door de XML Binding Wizard haal, maakt hij onder andere de volgende interfaces aan:
Delphi:
1
2
3
4
5
| TXMLRegio = class; TXMLRegioList = class; TXMLParts = class; TXMLPartsList = class; TXMLLeg = class; |
Er bestaan zoals in de xsd te zien is, meerdere regio's per regio, meerdere parts per regio en meerdere legs per part.
Maar... waarom krijg ik van de wizard geen IXMLLegList terug.
De volledige vorm van TXMLParts is:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
| { TXMLParts } TXMLParts = class(TXMLNodeCollection, IXMLParts) protected { IXMLParts } function Get_Leg(Index: Integer): IXMLLeg; function Add: IXMLLeg; function Insert(const Index: Integer): IXMLLeg; public procedure AfterConstruction; override; end; |
De enige manier om nu te ontdekken hoeveel legs er in 1 part zitten in de index te verhogen tot ik eruit knal. Terwijl er als onderdeel bij de lists een mooie count-function bestaat.
Ik kan heel bijdehant natuurlijk handmatig een IXMLLegList en een TXMLLegList aanmaken, maar dan raak ik die waarschijnlijk kwijt zodra ik de XSD aanpas en opnieuw door de wizard haal.
Iemand een suggestie?