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 :

[XSLT][XPATH] Conseil


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut [XSLT][XPATH] Conseil
    Bonjour,

    Edit: Le sujet d'avant je l'ai supprimez car c'étais une faute de frappe!

    Tojours dans l'idée de comparé deux balise quelle est la meilleur moyen de faire ce test:

    le xml:

    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
     
    <Test>
      <Record>
        <Person Ein="7" seq="3">
             <Name>toto</Name>
             <Heimat BFS="1040">Rothenburg</Heimat>
             <Heimat BFS="261">Zürich</Heimat>
             <Heimat BFS="351">Basel</Heimat>
        </Person>
      </Record>
      <Record>
        <Person Ein="8" seq="3"> //si je suis dans ce template
             <RefCancel Ein="7" seq="3"/>	
             <Name>toto</Name>
             <Heimat BFS="1040">Rothenburg</Heimat>
             <Heimat BFS="261">Zürich</Heimat>
        </Person>
      </Record>
    </Test>
    Comment faire pour comparer tous les Heimat voir s'ils correspondent et le cas échant si celui du noeud en-dessus ne correspond pas au deuxième sortir la valeur de Heimat du premier noeud!

    Sur cette exemple il faudrait sortie la valeur "Basel"! Mais attention il faut toujours comparer le deuxième avec le premier et sortir ce qu'il y a en plus (ou de différent) dans le premier et pas le contraire!

    Si c'est pas clair demandez-moi une explication supplémentaire!

    Je ne recherche pas une réponse toute faite (quoique si vous en avez l'envie) mais plutot comment s'y prendre pour un problème comme celui-ci!

    Merci pour vos conseils!

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    je pense qu'un exemple de sortie souhaitée éclaircirait les choses...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Merci pour ton intervention GrandFather!

    Oui c'est tout à fait possible!

    reprennons le xml de base plus haut

    et ajoutons le traitement 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
     
    ...
    <xsl:if test="RefCancel">
     <Ancien>
      <xsl:variable name="Ein" select="{RefCancel/@Ein}"/>
      <xsl:variable name="seq" select="{RefCancel/@seq}"/>[ancien: <xsl:choose>
    <xsl:when test="Name != ../preceding-sibling::Record/Person[@Ein=$Ein and @seq=$seq]/Name">
    <xsl:value-of select="../preceding-sibling::Record/Person[@Ein=$Ein and @seq=$seq]/Name"/>, <xsl:if test="test si les heimat ont changé">les Heimat qui ont changé (je veux faire comme ca pour qu'il y aie une virgule (,) entre Name et Heimat) biensur si les heimat qui ont changé sont plusieurs mettre aussi avec une virgule (,) entre chaque.</xsl:when>
    <xsl:when test="testez si mon ou mes Heimat on changé">
    <xsl:value-of select="mon Heimat ou mes Heimat qui a changé (je veux uniquement les Heimat qui sont dans le premier et pas dans le deuxième Record)"/>
    </xsl:when>
    </xsl:choose>
    ].</Ancien>
    </xsl:if>
    ...
    la sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Ancien>[ancien: Basel]</Ancien>
    et si le nom avait aussi changé dans le 2ème Record sa donnerait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Ancien>[ancien: toto, Basel]</Ancien>
    et si Basel se trouverait dans le deuxième et pas dans le premier Record je ne veux pas l'afficher! la sortie devrait donc être nul pour Heimat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Ancien>[ancien: ].</Ancien>
    Je déjà réussi a faire le traitement quand l'élément est unique (Name voir plus haut) mais ou je but c'est quand je doit comparé multiple à multiple!

    Merci de votre aide!

Discussions similaires

  1. Test sur le noeud frère suivant (XSLT, XPath)
    Par rprom1 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/02/2006, 16h04
  2. [xslt] [xpath] reformater un document xml
    Par deague dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 08/02/2006, 20h36
  3. xslt+xpath
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 03/10/2005, 15h08
  4. [XSLT+XPath] Échapper les accolades XPath
    Par Floyd dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 30/09/2005, 23h04

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