Bonjour à tous,
Je cherche désespérément à faire une séquence d'un type général pouvant contenir des types dérivés de ce type.
L'idée est: suite à une bonne définition de ce xsd, j'utilise xsd2Code et j'ai mes classes de générées correctement avec tout ce qui va avec (Sérialisation, loadFromFile...)
Je voudrais donc obtenir une List<Touche>
Cette Liste devra pouvoir contenir les sous-classes de Touche. En terme d'héritage C#, java c'est tout à fait normal.
Cependant j'ai du mal à comprendre la réalisation de cette structure en xsd
Voila ce que j'ai fait:
Tout d'abord la séquence pouvant contenir des XMLTouche
Une XMLTouche est du type XMLToucheBase
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <xs:element name="Touches"> <xs:complexType> <xs:sequence > <xs:element ref ="XMLTouche" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <xs:element name="XMLTouche" type="XMLToucheBase"/>
Un XMLToucheBase possède les propriétés(attributs) ligne et colonne
Un XMLToucheCaractere est une extension du type XMLToucheBase auquel j'ajoute le caractère et le caractèreShifté. il peut être utilisé/substitué à un élément XMLTouche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <xs:complexType name ="XMLToucheBase"> <xs:attribute name="Ligne" type="xs:unsignedByte" use="required"/> <xs:attribute name="Colonne" type="xs:unsignedByte" use="required" /> </xs:complexType>
Un XMLToucheBackspace est une extension de XMLToucheBase et peut être utilisé à la place de XMLTouche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <xs:element name="XMLToucheCaractere" substitutionGroup="XMLTouche"> <xs:complexType> <xs:complexContent> <xs:extension base="XMLToucheBase"> <xs:attribute name="Label" type="xs:string" use="required" /> <xs:attribute name="Shifted" type="xs:string" use="optional" /> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element>
Maintenant quand je génère avec XSD2Code, j'obtiens bien une List<XMLToucheBase>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <xs:element name="XMLToucheBackSpace" substitutionGroup="XMLTouche"> <xs:complexType> <xs:complexContent> <xs:extension base="XMLToucheBase"/> </xs:complexContent> </xs:complexType> </xs:element>
Par contre lors du loadFromFile, la liste est vide alors qu'elle ne devrait pas l'être.
Quelqu'un peut-il m'expliquer ou je me suis planté? Je ne vois pas trop pourquoi je n'y arrive pas.
Le fichier xml que je lis est valide par rapport à l'xsd. Par contre dans le fichier xml, je peux créer des éléments XMLTouche alors que ce n'est pas ce que je veux. Je me demande si le problème ne viens pas de là
En tout cas, merci de vos futurs conseils
Partager