Lire XML avec SQL Server parent/enfant
Résolu
alexmilano
Messages postés
423
Date d'inscription
Statut
Membre
Dernière intervention
-
alexmilano Messages postés 423 Date d'inscription Statut Membre Dernière intervention -
alexmilano Messages postés 423 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Bon fallait trouver un titre, ça regroupe mes soucis ...
Je dois lire du XML en SQL Server. Je vous donne mon exemple, vous allez comprendre.
Mon xml :
Un menu : Test 1.
2 sous menu de ce menu Test 1 : Test 2 et Test 2 Bis.
1 sous-menu de Test 2 : Test 3.
Je veux comme résultat : Une ligne par action, soit :
. Test 1
. Test 1 - Test 2
. Test 1 - Test 2 Bis
. Test 1 - Test 2 - Test 3
Voilà, si vous avez des idées ou des pistes.
J'ai déjà réussi à ramener le premier niveau :
declare @x xml
SET @x = XML (Ce XML étant mon code présenté)
SELECT v.value('./TITLE[1]','nvarchar(100)')
FROM @x.nodes('polymenus/actions/params/actionparams') AS t(v)
Et donc ça me parait pas compliqué de ramener chaque niveau, par contre, de trouver les liaisons, d'afficher mon résultat voulu, je galère, et je n'ai point trouvé de réponses encore ...
Pour le deuxième niveau, suffit de rajouter subactions/actions :
declare @x xml
SET @x = XML (Ce XML étant mon code présenté)
SELECT v.value('./TITLE[1]','nvarchar(100)')
FROM @x.nodes('polymenus/actions/subactions/actions/params/actionparams') AS t(v)
Merci d'avance pour votre aide et/ou vos réflexions afin de m'orienter !!
Si problème tu as, alors solution il y a ...
Bon fallait trouver un titre, ça regroupe mes soucis ...
Je dois lire du XML en SQL Server. Je vous donne mon exemple, vous allez comprendre.
Mon xml :
<polymenus>
<actions>
<params>
<actionparams>
<TITLE>Test 1</TITLE>
</actionparams>
</params>
<subactions>
<actions>
<params>
<actionparams>
<TITLE>Test 2</TITLE>
</actionparams>
</params>
<subactions>
<actions>
<params>
<actionparams>
<TITLE>Test 3</TITLE>
</actionparams>
</params>
</subactions>
</actions>
<actions>
<params>
<actionparams>
<TITLE>Test 2 Bis</TITLE>
</actionparams>
</params>
</actions>
</subactions>
</actions>
</polymenus>
Un menu : Test 1.
2 sous menu de ce menu Test 1 : Test 2 et Test 2 Bis.
1 sous-menu de Test 2 : Test 3.
Je veux comme résultat : Une ligne par action, soit :
. Test 1
. Test 1 - Test 2
. Test 1 - Test 2 Bis
. Test 1 - Test 2 - Test 3
Voilà, si vous avez des idées ou des pistes.
J'ai déjà réussi à ramener le premier niveau :
declare @x xml
SET @x = XML (Ce XML étant mon code présenté)
SELECT v.value('./TITLE[1]','nvarchar(100)')
FROM @x.nodes('polymenus/actions/params/actionparams') AS t(v)
Et donc ça me parait pas compliqué de ramener chaque niveau, par contre, de trouver les liaisons, d'afficher mon résultat voulu, je galère, et je n'ai point trouvé de réponses encore ...
Pour le deuxième niveau, suffit de rajouter subactions/actions :
declare @x xml
SET @x = XML (Ce XML étant mon code présenté)
SELECT v.value('./TITLE[1]','nvarchar(100)')
FROM @x.nodes('polymenus/actions/subactions/actions/params/actionparams') AS t(v)
Merci d'avance pour votre aide et/ou vos réflexions afin de m'orienter !!
Si problème tu as, alors solution il y a ...
A voir également:
- Lire XML avec SQL Server parent/enfant
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire epub - Guide
- Xml download - Télécharger - Édition & Programmation
- Lire fichier bin - Guide
- Cybera server - Télécharger - Divers Réseau & Wi-Fi
1 réponse
Pour information, j'ai trouvé. Au cas où quelqu'un en ait besoin un jour ...
DECLARE @X XML
SET @X = '
<polymenus>
<actions>
<params>
<actionparams>
<TITLE>Test 1</TITLE>
</actionparams>
</params>
<subactions>
<actions>
<params>
<actionparams>
<TITLE>Test 2</TITLE>
</actionparams>
</params>
<subactions>
<actions>
<params>
<actionparams>
<TITLE>Test 3</TITLE>
</actionparams>
</params>
</subactions>
</actions>
<actions>
<params>
<actionparams>
<TITLE>Test 2 Bis</TITLE>
</actionparams>
</params>
</actions>
</subactions>
</actions>
</polymenus>'
SELECT D1.value('(params/actionparams/TITLE)[1]', 'varchar(100)') Actions
FROM (SELECT @X X) X
CROSS APPLY X.nodes('//actions') AS N1(D1)
UNION
SELECT
D1.value('(params/actionparams/TITLE)[1]', 'varchar(100)') +
CASE WHEN D2.value('(params/actionparams/TITLE)[1]', 'varchar(100)') IS NULL THEN '' ELSE ' - ' + D2.value('(params/actionparams/TITLE)[1]', 'varchar(100)') +
CASE WHEN D3.value('(params/actionparams/TITLE)[1]', 'nvarchar(100)') IS NULL THEN '' ELSE ' - ' + D3.value('(params/actionparams/TITLE)[1]', 'nvarchar(100)')
END
END Actions
FROM (SELECT @X X) X
CROSS APPLY X.nodes('//actions') AS N1(D1)
OUTER APPLY D1.nodes('subactions/actions') AS N2(D2)
OUTER APPLY D2.nodes('subactions/actions') as N3(D3)
ORDER BY Actions
DECLARE @X XML
SET @X = '
<polymenus>
<actions>
<params>
<actionparams>
<TITLE>Test 1</TITLE>
</actionparams>
</params>
<subactions>
<actions>
<params>
<actionparams>
<TITLE>Test 2</TITLE>
</actionparams>
</params>
<subactions>
<actions>
<params>
<actionparams>
<TITLE>Test 3</TITLE>
</actionparams>
</params>
</subactions>
</actions>
<actions>
<params>
<actionparams>
<TITLE>Test 2 Bis</TITLE>
</actionparams>
</params>
</actions>
</subactions>
</actions>
</polymenus>'
SELECT D1.value('(params/actionparams/TITLE)[1]', 'varchar(100)') Actions
FROM (SELECT @X X) X
CROSS APPLY X.nodes('//actions') AS N1(D1)
UNION
SELECT
D1.value('(params/actionparams/TITLE)[1]', 'varchar(100)') +
CASE WHEN D2.value('(params/actionparams/TITLE)[1]', 'varchar(100)') IS NULL THEN '' ELSE ' - ' + D2.value('(params/actionparams/TITLE)[1]', 'varchar(100)') +
CASE WHEN D3.value('(params/actionparams/TITLE)[1]', 'nvarchar(100)') IS NULL THEN '' ELSE ' - ' + D3.value('(params/actionparams/TITLE)[1]', 'nvarchar(100)')
END
END Actions
FROM (SELECT @X X) X
CROSS APPLY X.nodes('//actions') AS N1(D1)
OUTER APPLY D1.nodes('subactions/actions') AS N2(D2)
OUTER APPLY D2.nodes('subactions/actions') as N3(D3)
ORDER BY Actions