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