Bonjour,

Sous SQL-SERVER 2005

Voici ma problématique :

J'aimerai insérer au début de chaque noeud <div> de class "maclass" un élément (dans mon cas un commentaire).

Le xml étant créé par l'utilisateur via une interface, la structure du xml pouvant être de n’importe quelle forme.

<root>
du texte 1
<texte>du texte 2</texte>
<div class="maclass">du texte 3</div>
<div class="autreclass">
du texte 4
<div class="maclass">du texte 5</div>
</div>
...
</root>
J'avais tout d'abords pensé à la fonction insert
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SET @chaine_xml.modify('insert <!--||--> as first into (//div[@class="maclass"])[1] ')
Le problème est que l'on ne peut utiliser qu'un singleton en cible.

J'ai donc essayer avec une itération, en me disant que je vais boucler sur chaque noeud, tester son attribut class avec un if. Et soit le dupliquer soit le transformer.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
SELECT @chaine_xml.query('for $i in root//* 
	return 
	if (data($i/@class)="maclass") 
		then <toto>reclace class</toto> 
		else $i
						 ')
Le résultat n'est pas satisfaisant car chaque nœud est remplacé, il faudrait que je parcours l'arbre xml de façon récursive.
La chose n'est pas possible, car la déclaration de fonction xquery n'est pas implémenté dans sql-server.

Là je sèche ...

Quelqu'un aurait-il une petite idée ?

Merci d'avance


Sylvain