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] for-each et variable


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
    Points : 786
    Points
    786
    Par défaut [XSL] for-each et variable
    bonjour j ai un template executant ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:for-each select="e:A">
        <xsl:variable name="pos" select="position()"/>
    	<xsl:call-template name="CompareNode">
    	  <xsl:with-param name="OriginalNode" select="."/>
    	  <xsl:with-param name="ComparedNode" select="$ComparedNode/e:A[$pos]"/>
    	</xsl:call-template>
    	<xsl:call-template name="CompareNode">
    [b]	  <xsl:with-param name="OriginalNode" select="../B[$pos]"/>[/b]
    [b]          <xsl:with-param name="ComparedNode" select="$ComparedNode/e:B[$pos]"/>[/b]
    	</xsl:call-template>
    </xsl:for-each>

    $ComparedNode englobe le noeud parent équivalent à celui comparé.
    le problème est que la 2eme partie du code ne s execute pas du tout correctement, en particulier si j utilise la variable $pos,
    est ce du a mon for-each, la portée de la variable (ça m etonnerai) ou autre?
    merci

  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
    Points : 10 927
    Points
    10 927
    Par défaut
    pas le temps de verifier mùais tu as essayé

    Ecris comme tu le fais je ne sais honnetement pas s'il teste l'existence de la variable(contenu) ou s'il utilise le contenu mais je parierais pour la premiere

  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
    Points : 786
    Points
    786
    Par défaut
    oui j ai essayé aussi mais le même résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:with-param name="OriginalNode" select="../B[position()=$pos]"/>
    quant à l existence de la variable ou son contenu...ça marche parfaitement à l appel du premier template

  4. #4
    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
    Points : 10 927
    Points
    10 927
    Par défaut
    Ton erreur c'est quoi, il te les dit identique alors que tu penses qu'iols sont differents, l'inverse ?
    Montre le code de ta template nommé et aussi un petit xml test pour lequel ta fonction foire

  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
    Points : 10 927
    Points
    10 927
    Par défaut
    autre question ou le param compare node est t'il initialisé ?

    On est deja dans la fonction ici ?

  6. #6
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    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
    <xsl:template name="CompareNode">
    	<xsl:param name="OriginalNode"/>
    	<xsl:param name="ComparedNode"/>
    		<xsl:variable name="name" select="concat(name($OriginalNode),'')"/>
    		<xsl:variable name="OriginalNodeValue"><xsl:value-of select="$OriginalNode/@* | $OriginalNode/text() | $OriginalNode/*"/></xsl:variable>
    		<xsl:variable name="ComparedNodeValue"><xsl:value-of select="$ComparedNode/@* | $ComparedNode/text() | $ComparedNode/*"/></xsl:variable>
     
     
    		<xsl:if test="$OriginalNodeValue != $ComparedNodeValue">
    			<xsl:element name="{$name}">
    				<xsl:attribute name="Updated">Inserted</xsl:attribute>
    				<xsl:attribute name="id">INS-<xsl:value-of select="$UpdatedRefDate"/>-<xsl:value-of select="count(preceding::*)"/></xsl:attribute>
    				<xsl:attribute name="Updated-ref">AMDT-<xsl:value-of select="$UpdatedRefDate"/></xsl:attribute>
    				<xsl:copy-of select="$OriginalNode/@*"/>
    				<xsl:for-each select="$OriginalNode/node()"><xsl:copy-of select="."/></xsl:for-each>
    				<xsl:element name="x:span">
    					<xsl:attribute name="Updated">Deleted</xsl:attribute>
    					<xsl:copy-of select="$ComparedNode/@*"/>
    					<xsl:for-each select="$ComparedNode/node()"><xsl:copy-of select="."/></xsl:for-each>
    				</xsl:element>
    			</xsl:element>
    		</xsl:if>
    		<xsl:if test="$OriginalNodeValue = $ComparedNodeValue">
    			<xsl:element name="{$name}">
    				<xsl:attribute name="Updated">No</xsl:attribute>
    				<xsl:copy-of select="$OriginalNode/@*"/>
    				<xsl:for-each select="$OriginalNode/node()"><xsl:copy-of select="."/></xsl:for-each>
    			</xsl:element>
    		</xsl:if>
    </xsl:template>
    ça c est mon template de comparaison...je suppose qu il y a plus simple mais disons que ça fonctionne pour tous mes éléments...

    le $ComparedNode est un parametre du template éxécuté, car le code mis appartient à un template..
    et oui il est bien initialsé, il contient un objet complet (celui que je souhaite en somme.

    les variables citées dans ce template sont crées au niveau de la feuille

    Le problème n est pas qu il me dit que c est la même chose ou pas, c est tout simplement que le process plante (msxsl en batch)

  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
    Points : 786
    Points
    786
    Par défaut
    j ai résolu mon soucis (un peu à la rrache mais bon)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="e:Significant-point-reference | e:Route-segment">
      <xsl:variable name="pos" select="position()"/>
      <xsl:call-template name="CompareNode">
        <xsl:with-param name="OriginalNode" select="."/>
          <xsl:with-param name="ComparedNode"   select="$ComparedNode/*[name()='e:A' or name()='e:B'][position()=$pos]"/>
      </xsl:call-template>
    </xsl:for-each>
    c un peu lourd je trouve mais ça passe...

Discussions similaires

  1. xsl:for-each avec un parametre pour select
    Par arnog dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/08/2008, 13h09
  2. [XSL] For each avec variables imbriquées
    Par Wells dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/05/2008, 19h28
  3. [XSL - XPATH?] Deux for-each, une variable et un noeud
    Par Jidewe dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 04/03/2008, 09h47
  4. [XSL] for-each + sort, et comparaison current previous value
    Par johan_barbier dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/11/2005, 16h46
  5. [XML/XSL] for-each imbriqués
    Par grome dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/11/2005, 12h44

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