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

Format d'échange (XML, JSON...) Java Discussion :

[Xalan] Récupérer la valeur d'un attribut dans une feuille XSLT


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 372
    Points
    2 372
    Par défaut [Xalan] Récupérer la valeur d'un attribut dans une feuille XSLT
    Bonjour,

    j'ai une feuille de style XSLT dans laquelle j'ai défini un ensemble d'attributs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:attribute-set name="texte">    
        <xsl:attribute name="font-size">11pt</xsl:attribute>    
        <xsl:attribute name="padding-before">0pt</xsl:attribute>
        <xsl:attribute name="padding-after">0pt</xsl:attribute>          
        <xsl:attribute name="font-weight">normal</xsl:attribute>
        <xsl:attribute name="font-variant">normal</xsl:attribute>      
      </xsl:attribute-set>
    Et dans une classe Java, je voudrais récupérer la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsl:attribute-set[@name='texte']/xsl:attribute[@name='font-size']/text()
    Cette classe utilise le contexte de la règle XSLT.
    J'ai tenté de récupérer la valeur à l'aide de la classe org.apache.xalan.templates.
    Mais je suis bloqué. Si vous aviez une idée. Merci.

    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
    Stylesheet stylesheet = context.getStylesheet(); 
     
        for (int i=0; i<stylesheet.getAttributeSetCount(); i++) {
          ElemAttributeSet elemAttributeSet = stylesheet.getAttributeSet(i);
          System.out.println("M1 name: " + elemAttributeSet.getNodeName() + ", localname : " + elemAttributeSet.getName().getLocalName());
     
          if (elemAttributeSet.getName().getLocalName().equals("texte")) {
            i = stylesheet.getAttributeSetCount() + 1;
            NodeList nl = elemAttributeSet.getChildNodes();
            System.out.println("M2 child : " + elemAttributeSet.hasChildNodes() + " : " + nl.getLength());    
     
            for (int j=0; j<nl.getLength(); j++) {
              ElemAttribute n = (ElemAttribute) nl.item(j);
              System.out.println("M3 name  : " + n.getNodeName() + ", localname : " + n.getLocalName());
     
              // Et là, pas moyen de récupérer la valeur de l'attribut name
     
              NodeList attributeNodeList = n.getChildNodes();
              System.out.println("M3 child : " + n.hasChildNodes() + " : " + attributeNodeList.getLength());    
     
                for (int k=0; k<attributeNodeList.getLength(); k++) { 
                  Node nt = attributeNodeList.item(k);
                System.out.println("M4 " + nt.getNodeName() + " : " + nt.getNodeValue());                      
                }
            }
     
          }        
        }

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    // Et là, pas moyen de récupérer la valeur de l'attribut name
    Je dirais c'est une très bonne question. La raison de ne pas la retrouver avec un raisonnement basé sur le classique dom-semblable modèle c'est que le modèle concret de xalan pour le document de transformation prend des caractères propres, très spécifiquement pour xslt.

    Prenons le modèle de xsl:attribute, le DTD descripteur paraître comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <!ELEMENT xsl:attribute %char-template;>
     <!ATTLIST xsl:attribute
       name %avt; #REQUIRED
       namespace %avt; #IMPLIED
       %space-att;
     >
    Le nom étant obligatoire est l'attribute pour l'identifier et joue un rôle plus important qu'un simple attribute. Et puis, dans une transformation, précisément, la valeur n'est parfois pas une simple texte: elle est possible qu'elle soit un template (avt). Le modèle la prend comme %avt quoi qu'il en soit mais pas comme CDATA... Toutes ces considérations sont prises comme les facteurs primaires pour le modèle d'objets dans xalan projet.

    Voilà, bref, ce qu'il faut faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
              // Et là, pas moyen de récupérer la valeur de l'attribut name
              // C'est fait comme ça
              String sname=((ElemElement)n).getName().getSimpleString();
              System.out.println("xsl:attribute element name: " + sname);
              /* 
                  Faites ce qu'il faut faire specifique selon le cas pour
                  font-size, padding-before...
              */

  3. #3
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 372
    Points
    2 372
    Par défaut
    Ok, merci bien, je vais tester cela tantôt.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Personnellement, je m'embêterais pas, je chargerais la feuille avec JDOM comme si c'était un document XML quelconque...

  5. #5
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 372
    Points
    2 372
    Par défaut
    Oui, en fait, cette feuille de style XSLT contient un élément d'extension Xalan.

    Pour la faire fonctionner, je dois définir la fonction dans une classe Java,
    qui doit répondre à certaines exigences définies pour extension Xalan.
    Aussi, je tenais à rester simple, avec des librairies déjà intégrées à Xalan.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/04/2014, 12h32
  2. [SH] Comment récupérer la valeur d un attribut dans un XML
    Par devjava83 dans le forum Shell et commandes POSIX
    Réponses: 4
    Dernier message: 24/01/2014, 09h48
  3. Réponses: 5
    Dernier message: 26/01/2009, 18h14
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. Récupérer les valeur d'un énuméré dans une string
    Par Oliv_75 dans le forum SL & STL
    Réponses: 5
    Dernier message: 28/09/2005, 00h55

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