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 :

informations XML XSL


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Par défaut informations XML XSL
    Bonjour,

    J'aimerais obtenir quelques informations sur l'utilisation de XML et XSL pour savoir si ça peut correspondre à mes besoins.

    Voici la structure du fichier XML que j'aimerais utiliser :
    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
    <itemNiveau1>
       <libelle>text</libelle>
       <description>text</description>
       <itemNiveau2>
          <libelle>text</libelle>
          <description>text</description>
          ...
              <itemNiveauN>
                 <libelle>text</libelle>
                 <description>text</description>
                 <informations>
                    <info1>text</info1>
                    <info2>text</info2>
                    ...
                    <info10>text</info10>
                 </informations>
              </itemNiveauN>
           ...
       </itemNiveau2>
    </itemNiveau1>
    (je sais pas si c'est très formel mais vous devriez comprendre)

    Pour info, je compte utiliser la techno JAVA, derrière le XML.

    Première question :
    Comme on peut le voir, le nombre de noeud de type "itemNiveauX" est indéfinis. Est ce facile d'insérer ou de supprimer des noeuds de type itemNiveau ?
    Je voudrais donner la possibilité à mes utilisateurs d'insérer ou de supprimer des niveaux.
    Pour ajouter un niveau N+1, à priori rien de compliquer.
    Mais pour ajouter un niveau intermédiaire entre 2 et N, je dois renommer tous les enfants puisque j'ajoute un niveau, non ? est ce facilement gérable ou tout simplement une bonne solution ? (Meme cas pour la suppression d'un noeud intermédiaire)


    Deuxième question :
    Si j'écris un fichier XSL pour l'apparence. Comment je gère le fait de ne pas savoir combien de noeud de type itemNiveau j'ai ? (ce que j'ai symbolisé par "..." dans mon exemple ci-dessus)

    Soyez indulgent, je débute en XML.
    Merci d'avance.

    Ludo

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 83
    Par défaut
    Bonjour,

    Je ne sais pas si c'est la meilleure solution, parce ce que je ne suis pas un spécialiste de l'algorithmie, ce qui a l'air plus d'être ton problème ici.

    Mais en ce qui concerne le nommage de tes éléments, je tenterais plus une structure indépendante dans le nom avec le niveau étant une information liée à ton élément ITEM, que tu pourras ainsi changer sans modifier tout ton document.

    Par exemple pour une structure à plat du fichier ::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <item level="1">
    </item>
    <item level="2">
    </item>
    ...
    <item level="n">
    </item>
    Ou de façon implicite dans la structure ::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <item><!--DEBUT niveau 1 -->
     <item><!--DEBUT niveau 2 -->
      <item /><!--DEBUT FIN niveau 3 -->
     </item><!--FIN niveau 2 -->
    </item><!--FIN niveau 1 -->
    Ou le (nombre de noeud parent s'appellant ITEM+1) t'indique le niveau

    Si ça peut t'aider.

    @+

    Xavier

  3. #3
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

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

    Citation Envoyé par vexa
    Mais en ce qui concerne le nommage de tes éléments, je tenterais plus une structure indépendante dans le nom avec le niveau étant une information liée à ton élément ITEM, que tu pourras ainsi changer sans modifier tout ton document.
    Tout à fait d'accord.

    Les indications de hiérarchie explicites dans les noms d'éléments (itemNiveau1, itemNiveau2, etc.) sont généralement à proscrire, car elles rigidifient le schéma, et compliquent les traitements opérés sur les instances où elles figurent.
    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

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Par défaut
    Merci pour ces informations.

    J'aime assez le :
    <item><!--DEBUT niveau 1 -->
    <item><!--DEBUT niveau 2 -->
    <item /><!--DEBUT FIN niveau 3 -->
    </item><!--FIN niveau 2 -->
    </item><!--FIN niveau 1 -->

    il est donc facile d'obtenir le nombre de noeuds "parent" apparemment, d'après ce que tu dis. Je pensais que cette solution était plus compliqué.

    En effet, l'ajout et la suppression de niveau sera plus aisé mais maintenant ma question est :
    Comment je différencie l'affichage des niveaux dans le fichier XSL ? (si le XSL est la meilleure solution, je pense que c'est déjà mieux qu'une CSS, je me trompe ?)
    En effet, je voudrais afficher différemment chaque sous-niveau pour que ça soit plus clair. (la différence se situerait au niveau de la couleur de fond ou du décalage vers la droite, par exemple)
    Encore une fois ma question peut paraitre stupide mais je n'ai pas encore utilisé de fichier XSL, je connais juste le principe.

    merci encore !

    lud0

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 83
    Par défaut Exemple
    Bonsoir,

    Effectivement, XSL couplé à XPath permet de sélectionner des données dans un document et de les transformer avant de les afficher, alors que CSS ne s'occupe que de leur mise en forme.

    Les deux sont donc complémentaires.

    Pour répondre à ta question, pour ma part, j'avais opté pour une structure redondante ::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <item level="1">
     <item level="2">
      <item level="n">
     </item>
    </item>
    pour une raison sûrement très intéressante que j'ai oublié , donc pour être sûr de ne pas te dire de connerie, j'ai testé ...

    côté 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <items>
    <item>item 1 niveau 1
     <item>item 1 niveau 2</item>
     <item>item 2 niveau 2</item>
     <item>item 3 niveau 2</item>
     <item>item 4 niveau 2</item>
     <item>item 5 niveau 2
      <item>item 1 niveau 3</item>
      <item>item 2 niveau 3</item>
      <item>item 3 niveau 3
       <item>item 1 niveau 4</item>
       <item>item 2 niveau 4</item>
      </item><!--END :: item 3 niveau 3 -->
     </item><!--END :: item 5 niveau 2 -->
     <item>item 6 niveau 2</item>
    </item><!--END :: item 1 niveau 1 -->
    <item>item 2 niveau 1</item>
    </items>
    côté 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <?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"
    	indent="yes"
    	encoding="UTF-8"
    	media-type="text/xml"
    	omit-xml-declaration="yes"/>
     
    <xsl:template match="/">
          <xsl:for-each select="//item">
          <xsl:element name="div">
           <xsl:attribute name="style">
            <xsl:text>margin-left:</xsl:text><xsl:value-of select="count(ancestor::item)*2"/><xsl:text>%;</xsl:text>
            <xsl:text>background-color:#</xsl:text>
             <xsl:call-template name="makeColor">
              <xsl:with-param name="colorPart"><xsl:value-of select="count(ancestor-or-self::item)"/></xsl:with-param>
             </xsl:call-template>
            <xsl:text>;</xsl:text>
           </xsl:attribute>
           <xsl:text>le nombre de noeuds parent s'appellant ITEM + celui testé actuellement est </xsl:text>
           <xsl:value-of select="count(ancestor-or-self::item)"/>
           <xsl:element name="br"/>
           <xsl:text>le niveau vaut donc le nombre de parents </xsl:text>
           <xsl:value-of select="count(ancestor::item)"/>
           <xsl:text> + 1 = </xsl:text>
           <xsl:value-of select="count(ancestor::item)+1"/>
           <xsl:element name="br"/>
           <xsl:text>la valeur du noeud est </xsl:text>
           <xsl:value-of select="self::item/text()"/>
           <xsl:element name="br"/>
          </xsl:element><!-- END :: div -->
          </xsl:for-each>
    </xsl:template>
     
    <xsl:template name="makeColor">
    <xsl:param name="colorPart"/>
     <xsl:text>99</xsl:text>
     <xsl:value-of select="$colorPart*10"/>
     <xsl:value-of select="$colorPart*10"/>
    </xsl:template>
    </xsl:stylesheet>
    On peut imaginer quelque chose comme ça avec le modèle "makeColor" un peu plus fournit qui générerait des couleurs plus variées.

    Voilà

    @+

    Xavier

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Par défaut
    Merci beaucoup pour ta réponse.

    Je comprend pas tout de ton fichier XSL mais j'y vois beaucoup plus clair.

    lud0

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 83
    Par défaut
    Salut,

    De rien, ça me fait apprendre aussi , le modèle est prêt à l'emploi, tu peux le tester pour voir le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <div style="margin-left:2%;background-color:#992020;">niveau 2</div>
    <div style="margin-left:4%;background-color:#993030;">niveau 3</div>
    Plus le niveau monte, plus la marge à gauche est grande et la couleur claire.

    Pour information, je l'ai transformé avec Xalan sous Netbeans.

    Si l'explication te vas, tu peux rajouter un petit résolu.

    @+
    Xavier

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

Discussions similaires

  1. information XML/ XSL/ Javascript
    Par missd12 dans le forum XML/XSL et SOAP
    Réponses: 20
    Dernier message: 10/07/2009, 10h33
  2. mise en page (Header and Footer) en XML-XSL.
    Par christine dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/03/2004, 16h31
  3. XML + XSL + PHP
    Par ZzZerf dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 21/03/2003, 15h54
  4. xml -> xsl -> xml
    Par virgile04 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/10/2002, 16h53
  5. Cours en Français sur XML-XSL et XPath
    Par Community Management dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 25/04/2002, 15h46

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