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]Problèmes d'ordre de lecture et d'écriture


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 37
    Points : 29
    Points
    29
    Par défaut [XSLT]Problèmes d'ordre de lecture et d'écriture
    bonjour,

    je veux faire une transformation XSL d'un fichier XML vers du texte brut.
    Mais le format de sortie du fichier texte est assez déifferent de la structure de mon fichier 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
    20
    21
    22
    23
    24
    25
    <sol nom="sol_defaut">
        <param nom="argi">1</param>
        <param nom="norg">1</param>
        <param nom="profhum">1</param>
        <param nom="calc">1</param>
        <param nom="pH">1</param>
        <param nom="concseuil">1</param>
        <param nom="albedo">1</param>
        <param nom="q0">1</param>
        <param nom="ruisolnu">1</param>
        <param nom="obstarac">1</param>>
        <option choix="2" nom="remontées capillaires" nomParam="coderemontcap">
            <choix code="1" nom="oui">
                <param nom="humcapil"/>
                <param nom="capiljour"/>
            </choix>
            <choix code="2" nom="non"/>
        </option>
        <option choix="2" nom="dénitrification" nomParam="codedenit">
            <choix code="1" nom="oui">
                <param nom="profdenit">20</param>
            </choix>
            <choix code="2" nom="non"/>
        </option>
    </sol>
    et le résultat final doit être du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    nomsol argi Norg profhum calc pH concseuil albedo q0 ruisolnu obstarac
    coderemontcap codedenit
    humcapil capiljour profdenit
    où chaque variable est en fait remplacée par sa valeur.

    Je vois très bien comment obtenir ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    nomsol argi Norg profhum calc pH concseuil albedo q0 ruisolnu obstarac
    coderemontcap
    humcapil capiljour
    codedenit
    profdenit
    mais c'est pas celui que je dois avoir...

    je m'y connais pas encore très bien en XSL, et je me posais des questions par rapport aux variables, concaténations de chaine pour les écrire ensuite, etc...

  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,

    Le but est de partir de l'élément racine <sol> et de parcourir ses éléments fils <param> et <option>, puis ensuite de parcourir les éléments <param> imbriqués dans les éléments <option> :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="text"/>
     
    	<xsl:template match="/sol">
    		<xsl:value-of select="@nom"/><xsl:text> </xsl:text>
    		<xsl:apply-templates select="param|option"/>
    		<xsl:apply-templates select="option//param"/>
    	</xsl:template>
     
    	<xsl:template match="param">
    		<xsl:value-of select="@nom"/><xsl:text> </xsl:text>
    	</xsl:template>
     
    	<xsl:template match="option">
    		<xsl:value-of select="@nomParam"/><xsl:text> </xsl:text>
    	</xsl:template>
     
    </xsl:stylesheet>
    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
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci beaucoup de ton aide,
    en partant de ce que j'avais fait et avec ton ade, voilà la feuille de style que j'ai obtenu et qui me donne bien ce que je recherche. J'ai du défénir des tmeplate pour chaque balise pour éviter les sorties "involontaires". Le processeur XSLT de JAXP semblent écrire par défautr la valeur des balises pour lesquelles ont a pas défini de template. Ce qui à tendance à ajouter des espaces et des retours chariots un peu partout en fonction de l'indentation du fichier XML original.

    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
    33
    34
    35
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE stylesheet [
    <!ENTITY space "<xsl:text> </xsl:text>">
    <!ENTITY cr "<xsl:text>
    </xsl:text>">
    ]>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:output method="text"/>
     
     
       <xsl:template match="sol">
          <xsl:apply-templates select="sol"/>
       </xsl:template>
     
       <xsl:template match="sol">
          <xsl:value-of select="@nom"/>&space;
          <xsl:apply-templates select="param"/>&cr;
          <xsl:apply-templates select="option"/>&cr;
          <xsl:apply-templates select="option//choix"/>
          <xsl:apply-templates select="tableau_entete"/>
          <xsl:apply-templates select="tableau"/>
       </xsl:template>
     
       <xsl:template match="param">
          <xsl:value-of select="@nom"/>&space;
       </xsl:template>
     
       <xsl:template match="option">
          <xsl:value-of select="@nomParam"/>&space;
       </xsl:template>
     
       <xsl:template match="choix">
          <xsl:apply-templates select="param|option"/>
       </xsl:template>
    </xsl:stylesheet>
    bon, faut encore que je change deux trois petite choses mais la structure est bonne.

    et voilà le fichier résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sol_defaut argi norg profhum calc pH concseuil albedo q0 ruisolnu obstarac
    coderemontcap codedenit 
    humcapil capiljour profdenit
    C'est parfait !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Problème ordre balisage
    Par Mygush dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 06/03/2008, 18h27
  2. Réponses: 6
    Dernier message: 21/07/2006, 09h18
  3. [PHP][XSLT] problème caractères accentués
    Par beho dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 29/05/2006, 09h29
  4. [FileSystemObject] ordre de lecture
    Par flogreg dans le forum ASP
    Réponses: 2
    Dernier message: 20/05/2005, 13h59
  5. [XSLT] Problème de chemin d'accès + XSLT
    Par Jorus dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/09/2004, 08h36

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