Voilà,
J'ai un xml que je souhaite modifier. Je l'appelle ici xmlSource.
J'ai un xml qui contient des descriptions (balises Description) pour certains nœuds. Je l'appelle ici xmlDescr
L'idée est de recréer exactement le xmlSource avec des balises Descriptions qui viennent de xmlDescr. La difficulté est que dans xmlSource, il n'y a pas forcément un nœud Description pour les balises concernés. Dans ce cas il faut en créé une.
Donc en résumé :
- Si xmlSource contient une balise Description pour le nœud à modifier, la remplace
- Si xmlSource ne contient pas de balise Description pour le nœud concerné
Je précise que le nœud précédent porte le nom 'nom'.
Voici la gueule de mon xslt :
Petite précision :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xsl:stylesheet [ <!ENTITY nl "<xsl:text> </xsl:text>"> ]> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" standalone="no"/> <xsl:template match="@* | //* " priority="1"> <xsl:if test="not(name() = 'Description')"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:if> </xsl:template> <xsl:template match="//*[name() = 'nom']" priority="2"> <Nom><xsl:value-of select="."/></Nom>&nl; <Description>C'est bien ici</Description> </xsl:template> </xsl:stylesheet>
Peut être il y a mieux mais il faut être indulgent avec moi car c'est mon premier xslt, mon idée est de recopier tous les nœud sauf le nœud description puis remplacer le nœud 'nom' par le nœud 'nom' et du nœud Description (avec un saut de ligne entre les deux).
Bon,
si j'ai le xml suivant :
La sortie me donne ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?xml version="1.0" encoding="utf-8"?> <test> <test1>toto</test1> <autre> <nom>essai</nom> <Description>titi</Description> </autre> </test>
Le résultat est conforme à ce que j'attendais sauf que le nœud Description est mal indenté et quand les balise Description et fin de balise autre, se trouve un espace parasite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <test> <test1>toto</test1> <autre> <Nom>essai</Nom> <Description>C'est bien ici</Description> </autre> </test>
Partager