Bonjour, j'ai deux fichiers XML:

Fichier1
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
 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="Template.xsl" type="text/xsl"?>
 
<texte>
   <phrase nb=1>
Ceci est un très bon
<nomCand>
         <obPT Verbe="null"
		terminaison="ment"/>
	<mot>développement</mot>
</nomCand>
.
</phrase>
   <phrase nb=2>
La première
<nomCand>
         <obPT Verbe="null"
		terminaison="tion"/>
	<mot>formation</mot>
</nomCand>
de ce genre.
</phrase>
</texte>
Fichier2

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"?>
 
<lex>
<verbe>former</verbe>
<verbe>développer</verbe>
<verbe>changer</verbe>
<verbe>entrer</verbe>
</lex>
Mon but est de copier le fichier1 en mettant à jour l'attribut "Verbe" de la manière suivante:
1- je regarde si l'attribut "terminaison" est égale à "ment"
2- si oui, je récupère la substring de la chaîne de caractère entre <mot></mot> sans le "ment", ici "développe", et je regarde si dans Fichier2 il y a une entrée <verbe><verbe> qui contient (avec contains) la "substring", si oui
3- je met la valeur de l'entrée <verbe></verbe> correspondante, ici "développer", à la place de "null" à l'attribut "Verbe" du Fichier1.
4-si non, je laisse la valeur "null".

Voici mes feuilles xsl:

Identity.xsl (elle recopie fichier1):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "xml" encoding="UTF-8" indent='yes'/>
 
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
Template.xsl (qui importe Identity.xsl)

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
 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="Identity.xsl"/>
 
 
  <xsl:template match="@Verbe">
  <xsl:choose>
  <xsl:when test="@terminaison='ment'">
  <xsl:if test= "contains(document('fichier2.xml')//verbe,substring(texte/phrase/nomCand/mot,1,index-of(texte/phrase/nomCand/mot,'ment')-1))">
     <xsl:attribute name="Verbe">
       <xsl:value-of select="replace(.,'null',document('fichier2.xml')//verbe)"/>
     </xsl:attribute>
</xsl:if>
  </xsl:when>
  <xsl:otherwise>
     <xsl:attribute name="Verbe">
       <xsl:value-of select="."/>
     </xsl:attribute>
  </xsl:otherwise>
</xsl:choose>
  </xsl:template>
</xsl:stylesheet>
J'aimerais rendre à César ce qui lui appartient, en disant que "Identity.xsl" et une partie de "Template.xsl" proviennent de http://www.dpawson.co.uk/xsl/sect2/i....html#d6349e43.

J'obtiens ce type d'erreur " The child axis starting at an attribute() node will never select anything", apparement (comme dit dans le titre) cela est dû au fait que les attributs "Verbe" et "terminaison" sont sur le même niveau.

A l'aide