y a t il un bon algorythme de comparaison de noeud
vu que test="A=B" ne suffit pas apparement...![]()
y a t il un bon algorythme de comparaison de noeud
vu que test="A=B" ne suffit pas apparement...![]()
Si tu cherche a savoir si c'est le "meme noeud"
generate-id tout simplement
Si tu cherches a verfier quils ont exactement la meme structure et valeur derriere, comparer tous les descendants 1 par 1 dans le meme ordretest="generate-id(A)=generate-id(B)"
je suppose que le generate-id() prend en compte l emplacement du noeud dans l arborescence...car si c est le cas, ce n est pas bon.
sinon effectivement je peux essayer deja![]()
ça ne signifie pas la meme chose au fait?Envoyé par Erwy
si le noeud à la même structure...avec des noeuds enfants identiques... c est donc LE même ... non?
Oui , j'ai bien dit "le meme" .
Autrement , la valeur d'un noeud element etant la concatenation des noeuds textes descendants
les noeuds a et b ont même valeurs textuelles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <r> <a>a<c>b</c></a> <b>ab</b> </r>
Il te faut donc parcourir 1 à 1 les descendant des 2 noeuds (au moins text() ) et les comparer 1 par 1
Non , ici les deux noeuds a ont meme valeurs et meme structures mais ce ne sont pas les meme noeudsEnvoyé par tiscars
Pour caricaturer deux jumeaux (voir deux clones) ne sont pas la même personne, ils sont deux personnes (sensiblement) identique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <R> <a>1 <b>2</b></a> <a>1 <b>2</b></a> </R>
De meme que 2 noeud sont aussi defini par leur position dans un arbre
d accord...à mon sens ils ne sont pas égaux comme je l entend
je parlais bien de tester
avec un autre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <r> <a>a<c>b</c></a> </r>
situé dans un autre arbre (peut etre à un endroit différent par contre)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <r> <a>a<c>b</c></a> </r>
donc generate-id devrait faire l affaire
Merci Erwy
on s'est pas bien comprisEnvoyé par tiscars
generate-id() test si c'est le "même" noeud, si tu compare deux arbres differents ce sont des noeuds a structure identique, donc tu as besoin de faire l'algo qui test tous les descenfants 1 par 1 (et qui s'arrete a la premiere difference)
oui oui j ai compris... ça aurait été trop beau
je posterai l algo histoire de voir s il n y a pas de "faille"
![]()
pas testé c'est l'idee
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
27
28
29
30
31
32 <xsl:call-template name="comp"> <xsl:with-param name="a" select="truc/descendant-or-self::node()"></xsl:param> <xsl:with-param name="b" select="toto/descendant-or-self::node()"></xsl:param> </xsl:call-template> <xsl:template name="comp"> <xsl:param name="a"></xsl:param> <xsl:param name="b"></xsl:param> <xsl:choose> <xsl:when test="$a and $b"> <xsl:choose > <xsl:when test="name($a[1])=name($b[1]) and $a[1]=$b[1]"> <xsl:call-template name="comp"> <xsl:with-param name="a" select="$a[position()>1]"></xsl:param> <xsl:with-param name="b" select="$b[position()>1]"></xsl:param> </xsl:call-template> </xsl:when> <xsl:otherwise>false()</xsl:otherwise> </xsl:choose> </xsl:when> <xsl:when test="($a and not($b)) or ($b and not($a))">false()</xsl:when> <xsl:otherwise>true()</xsl:otherwise> </xsl:choose> </xsl:template>
Apparement tu testes l existence des noeuds...
va falloir que je reflechisse la...
héhé merci![]()
Partager