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] Test xsl:if


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut [XSLT] Test xsl:if
    Bonjour,

    Voila j'ai un test à faire mais je ne sais pas si comme je le fais c'est optimale:

    mon xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <AV type="Verfuegung">
      <AVel F8="1" F9="0" F15="0">
        <Title>Anmeldung</Title>
      </AVel>
      <AVel F8="0" F9="1" F15="0">
        <Title>In das Handelsregister wird einget</Title>
      </AVel>
      <AVel F8="1" F9="1" F15="0">
        <Title>Firma</Title>
        <Text>TAURUS Equities AG</Text>
      </AVel>
    </AV>
    dans ce XML j'aimerais que:

    si le @type de AV est égal à Verfuegung qu'il ne prenne que les AVel qui ont @F15=1 et @F9=1

    si le @type de AV est égal à Anmeldung qu'il ne prenne que les AVel qui ont @F15=1 et @F8=1

    J'ai donc pensé dans un premier temps à faire mon xslt comme ceci:

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    	<xsl:variable name="AouV">
    		<xsl:choose>
    			<xsl:when test="/AV/@type='Verfuegung'">@F15='0' and @F9='1'</xsl:when>
    			<xsl:otherwise>@F15='0' and @F8='1'</xsl:otherwise>
    		</xsl:choose>
    	</xsl:variable>
    ...
    <xsl:template match="AVel">
    		<xsl:if test="$AouV">
    ...
    </xsl:if>
    </xsl:template>
    </xsl:stylesheet>
    Mais ca ne marche pas?

    alors j'ai fait mon teste comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="(../@type='Anmeldung' and @F15='0' and @F8='1') or (@F15='0' and @F9='1' and ../@type='Verfuegung')">
    Mais es-ce vraiment optimale comme test ou il serait mieux de faire ca avec des variables (mais comment?)?

    Merci pour vos réponses!

    ++

    Thierry

  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 Re: [XSLT] Test xsl:if
    Bonjour,

    Citation Envoyé par virgul
    Mais ca ne marche pas?
    C'est normal, les expressions XPath ne peuvent pas être interprétées dynamiquement (i.e. elles sont analysées avant l'exécution de la feuille de style).

    Plutôt qu'utiliser un xsl:if, tu devrais utiliser des templates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template match="AV[@type="Verfuegung"]/AVel[@F9=1 and @F15=1]">
    ...
    </xsl:template>
    <xsl:template match="AV[@type="Anmeldung"]/AVel[@F8=1 and @F15=1]">
    ...
    </xsl:template>
    <xsl:template match="AVel">
    <!-- Traiter les autres cas -->
    ...
    </xsl:template>

  3. #3
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Merci pour ta réponse GrandFather!

    Mais le problème c'est que mise à part ca le traitement d'après ne change pas il s'agit soit de prendre tout les F9=1 ou tout les F8=1 (le F15 indique si les champs est vide)!

    D'ou ma question: es-ce vraiment une bonne idée de doubler mon Template?

    Et si on faisait ca dans l'apply-template?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:choose>
    <xsl:when test="@type='Verfuegung'"><xsl:apply-template match="AVel[@F9=1 and @F15=0]"/></xsl:when>
    <xsl:otherwise><xsl:apply-template match="AVel[@F8=1 and @F15=0]"/></xsl:otherwise>
    </xsl:choose>
    Il me semble que dans un de tes post de ce forum tu disais qu'il ne fallait pas procéder comme ceci mais je ne me souviens plus de la raison?

    Merci pour ton aide!

    ++

    Thierry

Discussions similaires

  1. XSLT test sur xsl:template
    Par Pelote2012 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 11/12/2014, 15h19
  2. [XSLT] Probleme <xsl:if test=" element = $param "> !
    Par billynirvana dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/03/2007, 14h49
  3. [XSLT] Test égalité noeuds différents
    Par bruno782 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 24/10/2005, 20h58
  4. XSLT et XSL-FO
    Par Ethylene dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/10/2005, 09h47
  5. xslt --> test sur les chiffres
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/09/2005, 13h17

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