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] Expression booléenne en tableau [Sources]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 7
    Points
    7
    Par défaut [XSLT] Expression booléenne en tableau
    Salut,

    Dans un fichier XML, je dispose d'un tag qui contient une expression booleenne comme suit :

    (A = 1 AND B = 2) OR (A = 3 AND C = 4)

    Je dois réaliser une petite feuille xsl pour transformer le contenu de la tag en un tableau équivalent à :

    <table>
    <tr><td>A</td><td>B</td><td>C</td><tr>
    <tr><td>1</td><td>2</td><td>&nbsp;</td><tr>
    <tr><td>3</td><td>&nbsp;</td><td>4</td><tr>
    </table>

    La difficulté est que les variables (A, B, C, ...) ne sont pas forcément dans l'expression mais il faut que les valeurs qui concernent une même variable soient toujours alignées en colonnes

    Je tente de réaliser l'opération en plusieurs transformations mais je n'y arrive pas.

    Avez vous une idée ?

  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,

    c'est faisable, en passant par des fonctions récursives truffées de substring-before et autres, mais pas facilement, XSLT n'ayant pas été conçu pour le parsing de texte.

    Le plus simple serait de créer une petite fonction qui le fasse, écrite dans un langage (Java, Javascript...) accepté comme langage d'extension par ton processeur XSLT.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Si par contre, je pars de ce morceau 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
    <rule>
        <cols>
            <col nb="1">AA</col>
            <col nb="2">BB</col>
            <col nb="3">CC</col>
        </cols>
        <rows>
             <row>
                 <col nom="AA">100</col>
                 <col nom="BB">200</col>
             </row>
             <row>
                 <col nom="AA">300</col>
                 <col nom="CC">400</col>
             </row>
        </rows>
    </rule>
    Voici un début de feuille 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    <xsl:template match="cols/col">
    		<td><xsl:value-of select="."/></td>
    	</xsl:template>	
     
    <xsl:template match="/rule">
    	<table>
    		<tr>
    			<xsl:apply-templates select="cols/col"/>		
    		</tr>
     
     
    		<xsl:for-each select="rows/row">
    			<tr>
    				<xsl:variable name="nbrow" select="position()"/>
    				<xsl:for-each select="col">
    					<xsl:variable name="nbcol" select="position()"/>
    					[b]// Code manquant[/b]
     
     
     
    				</xsl:for-each>
    			</tr>	
     
    		</xsl:for-each>
    	</table>
    </xsl:template>
    Et finalement voici le résultat attendu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <table>
    <tr><td>AA</td><td>BB</td><td>CC</td><tr>
    <tr><td>100</td><td>200</td><td>&nbsp;</td><tr>
    <tr><td>300</td><td>&nbsp;</td><td>400</td><tr>
    </table>
    En fait, il me manque le code pour relié la col d'une row par rapport à l'ordre des colonnes définis dans le bloc cols/col

    Avez vous une idée ?

  4. #4
    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
    Je procèderais différemment, en itérant sur les lignes, puis à l'intérieur de chaque itération, je ferais une autre itération sur les définitions de colonnes, 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
    18
    19
    20
    21
    22
    23
    <xsl:template match="rule">
      <table>
        <tr>
          <xsl:for-each select="cols/col">
              <xsl:sort select="@nb"/>
              <td>
                <xsl:value-of select="."/>
              </td>
          </xsl:for-each>
        </tr>
        <xsl:for-each select="rows/row">
          <xsl:variable name="ligne" select="."/>
          <tr>
            <xsl:for-each select="/rule/cols/col">
              <xsl:sort select="@nb"/>
              <td>
                <xsl:value-of select="$ligne/col[@nom = current()]"/>
              </td>
            </xsl:for-each>
          </tr>
        </xsl:for-each>
      </table>
    </xsl:template>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

Discussions similaires

  1. Analyseur Syntaxique Expression Booléenne
    Par Invité dans le forum Langage
    Réponses: 8
    Dernier message: 01/10/2006, 10h57
  2. [Tableaux] Remplacement d'expression dans un tableau
    Par Romalafrite dans le forum Langage
    Réponses: 3
    Dernier message: 22/09/2006, 17h34
  3. XSLT : representation HTML en tableau double entree
    Par samouille666 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/06/2006, 20h18
  4. [XSLT] Expression régulière
    Par ploxien dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 30/05/2006, 17h19
  5. [XML-XSLT] Données dans un tableau
    Par Hoegaarden dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 10/12/2004, 15h51

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