OVH Cloud OVH Cloud

[FOR XML]renvoyer des données sous forme de XML hiérarchique

2 réponses
Avatar
DigueDao
bonjour,

je voudrais g=E9n=E9rer un fichier XML =E0 partir d'une table.
En cherchant , j'ai trouv=E9 la commande FOR XML avec ses
diff=E9rentes variantes et la plus appropri=E9e pour mon cas
semble =EAtre EXPLICIT mais j'ai un peu de mal =E0 comprendre
comment =E7a marche, donc voici mon probleme:

J'ai une table Ecole avec les champs suivants=20
(IdClasse, NomClasse, IdEleve, NomEleve)

je voudrais obtenir le flux xml suivant :
<Classe IdClasse=3D"1" NomClasse=3D"Classe1">
<Eleve IdEleve=3D"1" NomEleve=3D"Eleve1"/>
<Eleve IdEleve=3D"2" NomEleve=3D"Eleve2"/>
<Eleve IdEleve=3D"3" NomEleve=3D"Eleve3"/>
<Eleve IdEleve=3D"4" NomEleve=3D"Eleve4"/>
<Eleve IdEleve=3D"5" NomEleve=3D"Eleve5"/>
</Classe>
....
<Classe IdClasse=3D"10" NomClasse=3D"Classe10">
<Eleve IdEleve=3D"101" NomEleve=3D"Eleve101"/>
<Eleve IdEleve=3D"102" NomEleve=3D"Eleve102"/>
<Eleve IdEleve=3D"103" NomEleve=3D"Eleve103"/>
<Eleve IdEleve=3D"104" NomEleve=3D"Eleve104"/>
<Eleve IdEleve=3D"105" NomEleve=3D"Eleve105"/>
</Classe>


ca n'a pas l'air compliqu=E9 mais je gagnerai du temps si je
pouvais comprendre cet exemple.

d:->>

2 réponses

Avatar
Patrice
La structure est-elle imposée. Si non il me semble plus correct d'avoir :
- une table Ecole avec l'id et le nom
- une table Elève avec l'id, le nom et l'école d'appartenance

Ensuite un simple FOR XML AUTO devrait suffire...

Avec le mode EXPLICIT cela sera sans doute un peu plus compliqué...

Patrice
--

"DigueDao" a écrit dans le message de
news:04fe01c4f3db$504764a0$
bonjour,

je voudrais générer un fichier XML à partir d'une table.
En cherchant , j'ai trouvé la commande FOR XML avec ses
différentes variantes et la plus appropriée pour mon cas
semble être EXPLICIT mais j'ai un peu de mal à comprendre
comment ça marche, donc voici mon probleme:

J'ai une table Ecole avec les champs suivants
(IdClasse, NomClasse, IdEleve, NomEleve)

je voudrais obtenir le flux xml suivant :
<Classe IdClasse="1" NomClasse="Classe1">
<Eleve IdEleve="1" NomEleve="Eleve1"/>
<Eleve IdEleve="2" NomEleve="Eleve2"/>
<Eleve IdEleve="3" NomEleve="Eleve3"/>
<Eleve IdEleve="4" NomEleve="Eleve4"/>
<Eleve IdEleve="5" NomEleve="Eleve5"/>
</Classe>
....
<Classe IdClasse="10" NomClasse="Classe10">
<Eleve IdEleve="101" NomEleve="Eleve101"/>
<Eleve IdEleve="102" NomEleve="Eleve102"/>
<Eleve IdEleve="103" NomEleve="Eleve103"/>
<Eleve IdEleve="104" NomEleve="Eleve104"/>
<Eleve IdEleve="105" NomEleve="Eleve105"/>
</Classe>


ca n'a pas l'air compliqué mais je gagnerai du temps si je
pouvais comprendre cet exemple.

d:->>
Avatar
Fred
Bonjour,
Au cas où tu voudrais garder une table unique, voilà une requête qui
fonctionne :
SELECT DISTINCT CLASSE.IdClasse, CLASSE.NomClasse, ELEVE.IdEleve,
ELEVE.NomEleve
FROM TEST AS CLASSE INNER JOIN TEST AS ELEVE ON CLASSE.IdClasse =
ELEVE.IdClasse
ORDER BY CLASSE.IdClasse, ELEVE.IdEleve
FOR XML AUTO

(TEST est la table d'origine)

Le mode EXPLICIT est compliqué. Le seul cas où je me suis vu obligé de
l'utiliser est le cas où un des champs contient lui même du XML que je veux
réintégré dans le résultat final (sans que les caractères spéciaux <, >,
etc... soient transformés en &lt; &gt; etc ...)
On peut en général s'en sortir avec des jointures comme dans l'exemple ci
dessus.
Des spécialistes pourront peut-être compléter cette réponse.


"DigueDao" a écrit dans le message de
news: 04fe01c4f3db$504764a0$
bonjour,

je voudrais générer un fichier XML à partir d'une table.
En cherchant , j'ai trouvé la commande FOR XML avec ses
différentes variantes et la plus appropriée pour mon cas
semble être EXPLICIT mais j'ai un peu de mal à comprendre
comment ça marche, donc voici mon probleme:

J'ai une table Ecole avec les champs suivants
(IdClasse, NomClasse, IdEleve, NomEleve)

je voudrais obtenir le flux xml suivant :
<Classe IdClasse="1" NomClasse="Classe1">
<Eleve IdEleve="1" NomEleve="Eleve1"/>
<Eleve IdEleve="2" NomEleve="Eleve2"/>
<Eleve IdEleve="3" NomEleve="Eleve3"/>
<Eleve IdEleve="4" NomEleve="Eleve4"/>
<Eleve IdEleve="5" NomEleve="Eleve5"/>
</Classe>
....
<Classe IdClasse="10" NomClasse="Classe10">
<Eleve IdEleve="101" NomEleve="Eleve101"/>
<Eleve IdEleve="102" NomEleve="Eleve102"/>
<Eleve IdEleve="103" NomEleve="Eleve103"/>
<Eleve IdEleve="104" NomEleve="Eleve104"/>
<Eleve IdEleve="105" NomEleve="Eleve105"/>
</Classe>


ca n'a pas l'air compliqué mais je gagnerai du temps si je
pouvais comprendre cet exemple.

d:->>