y a t il un bon algorythme de comparaison de noeud
vu que test="A=B" ne suffit pas apparement... :oops:
Version imprimable
y a t il un bon algorythme de comparaison de noeud
vu que test="A=B" ne suffit pas apparement... :oops:
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 ordreCitation:
test="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 :lol:
ça ne signifie pas la meme chose au fait?Citation:
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 textuellesCode:
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 noeudsCitation:
Envoyé par tiscars
Pour caricaturer deux jumeaux (voir deux clones) ne sont pas la même personne, ils sont deux personnes (sensiblement) identique.Code:
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 autreCode:
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:
1
2
3 <r> <a>a<c>b</c></a> </r>
donc generate-id devrait faire l affaire
Merci Erwy
arghhh..c pas bon alors
on s'est pas bien compris :koi:Citation:
Envoyé 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"
:roll:
pas testé c'est l'idee
Code:
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 :oops: