IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSL] egalité de noeud


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut [XSL] egalité de noeud
    y a t il un bon algorythme de comparaison de noeud
    vu que test="A=B" ne suffit pas apparement...

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Si tu cherche a savoir si c'est le "meme noeud"
    generate-id tout simplement

    test="generate-id(A)=generate-id(B)"
    Si tu cherches a verfier quils ont exactement la meme structure et valeur derriere, comparer tous les descendants 1 par 1 dans le meme ordre

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    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

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    Citation Envoyé par Erwy
    Si tu cherche a savoir si c'est le "meme noeud"

    Si tu cherches a verfier quils ont exactement la meme structure et valeur derriere, comparer tous les descendants 1 par 1 dans le meme ordre
    ça ne signifie pas la meme chose au fait?
    si le noeud à la même structure...avec des noeuds enfants identiques... c est donc LE même ... non?

  5. #5
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Oui , j'ai bien dit "le meme" .

    Autrement , la valeur d'un noeud element etant la concatenation des noeuds textes descendants

    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>
    les noeuds a et b ont même valeurs textuelles

    Il te faut donc parcourir 1 à 1 les descendant des 2 noeuds (au moins text() ) et les comparer 1 par 1

  6. #6
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Citation Envoyé par tiscars
    ça ne signifie pas la meme chose au fait?
    si le noeud à la même structure...avec des noeuds enfants identiques... c est donc LE même ... non?
    Non , ici les deux noeuds a ont meme valeurs et meme structures mais ce ne sont pas les meme noeuds
    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>
    Pour caricaturer deux jumeaux (voir deux clones) ne sont pas la même personne, ils sont deux personnes (sensiblement) identique.
    De meme que 2 noeud sont aussi defini par leur position dans un arbre

  7. #7
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    d accord...à mon sens ils ne sont pas égaux comme je l entend
    je parlais bien de tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <r>
      <a>a<c>b</c></a>
    </r>
    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)

    donc generate-id devrait faire l affaire
    Merci Erwy

  8. #8
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    arghhh..c pas bon alors

  9. #9
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Citation Envoyé par tiscars

    situé dans un autre arbre (peut etre à un endroit différent par contre)

    donc generate-id devrait faire l affaire
    Merci Erwy
    on s'est pas bien compris

    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)

  10. #10
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    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"

  11. #11
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    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>

  12. #12
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    Apparement tu testes l existence des noeuds...
    va falloir que je reflechisse la...
    héhé merci

Discussions similaires

  1. [XSL]Problème affiche noeuds non traités
    Par tomsawyer dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 27/06/2006, 16h22
  2. Réponses: 1
    Dernier message: 01/06/2006, 17h18
  3. [xml/xsl] Problème de noeuds et attributs
    Par Avallach dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/01/2006, 14h31
  4. [XSL] Accès à un noeud dans une boucle
    Par Trin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 15/11/2005, 14h32
  5. xsl ---> filtrage des noeuds avec "not"
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/07/2005, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo