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 :

Séparation des balises enfants


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
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut Séparation des balises enfants
    Bonjour à tous,

    Je débute sur XSLT, et j'ai actuellemnt un problème, donc je ne suis pas parvenu à trouver la solution sur internet...

    Voici mon XML d'input :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <A1>
    <B name="B1"/>
    </A1>
    <A2>
    <B name="B3"/>
    </A2>
    La définition de mes balises B sont réalisées dans un XML séparé (appelons le def.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
    <B name="B1">
    <C1>B1C1</C1>
    <C2>B1C2</C2>
    </B>
     
    <B name="B2">
    <C1>B2C1</C1>
    <C2>B2C2</C2>
    </B>
     
    <B name="B3">
    <C1>B3C1</C1>
    <C2>B3C2</C2>
    </B>
    Enfin, voici le début de mon XSLT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void A1()
    {
    <xsl:apply-templates/>
     
    }
     
    public void A2()
    {
    <xsl:apply-templates/>
     
    }
    Ce que je voudrais, c'est écrire la valeur de la balise C1 de chaque balise B MATCHANT (donc pas B2) dans la fonction A1, et respectivement pour C2 avec A2.

    Je vous remercie tous par avance!

    Bonne journée


    Arnaud

  2. #2
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Il faut utiliser la fonction document(...) pour charger un des deux XMLs (ont va dire celui qui contient la définition de B):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="B">
      <xsl:copy-of select="document('chemin/vers/fichier.xml')/racine/B[@name=current()/@name]"/>
    </xsl:template>

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut
    Salut!


    J'ai réussi à résoudre mon pb tout seul (come quoi... et pourtant je n'y croyais pas^^)

    (le problème n'était pas dans le document(), au passage )

    En gros, j'ai voici la manipulation réalisée (toute bete) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:template match="A1">
    public void A1()
    {
    <xsl:call-template select="C1toA1"/>
    }
    </xsl:template>
    <xsl:template name="C1toA1">
    <xsl:foreach select="./B">
    <xsl:variable name="varname" select="./@name"/>
    <xsl:value-of select="document('definition.xml')"/racine/B[@name=$varname]/C1>
    </xsl:foreach>
    </xsl:template>
    Recopier la meme fonction dans le template de en adaptant le gras, et normalement c'est bon.

    Il peut y avoir des erreurs, car il ne s'agit pas du vrai programme, mais l'idée est la suivante :

    -On fait un foreach des balises B du fichier input (donc des balises présentes)
    -On récupère chaque attribute
    -On sélectionne chaque balise C1 enfant de la balise matchant au nom récupéré avant
    Et on écrit cette fonction dans le template de A

    Merci en tout cas

    Je vois au moins que le forum est rapide pour répondre, au moins je me sens moins seul (personne à mon travail ne connait XSLT)

Discussions similaires

  1. [Article] Liste des balises et de leurs enfants pour une validation XHTML 1.1
    Par giminik dans le forum Publications (X)HTML et CSS
    Réponses: 12
    Dernier message: 12/02/2018, 15h11
  2. [XL-2010] Regex - Comparer des champs avec des balises de séparation aléatoires
    Par Michocs17141 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/09/2014, 10h58
  3. Liste des balises et de leurs enfants pour une validation XHTML 1.1
    Par giminik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/12/2011, 18h15
  4. Position des balises H2 ou comment les numéroter
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 12/07/2003, 19h24
  5. Placement des balises avec DTD
    Par Keul125 dans le forum Valider
    Réponses: 4
    Dernier message: 28/05/2003, 12h08

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