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 :

arborescence - XML2XML en XSLT


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut arborescence - XML2XML en XSLT
    Bonjour,

    Mon besoin est de transformer un fichier XML en un autre fichier XML (sur lequel j'ai des contraintes en terme de xsd) en passant par du XSLT (j'utilise XALAN pour des contraintes logicielles).
    J'ai déjà travaillé avec XSLT sur des customisations plutôt simples mais là je sèche.
    Voici le fichier INPUT que je souhaite transformer (simplifié pour le seul point qui me pose problème):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <toto name="value1">
        <toto name="value2">
             <toto name="value3">
    			<toto name="value4" />
    			<toto name="value5" />
    		</toto>              
    		<toto name="value6">
    			<toto name="value7" />
    		</toto>
    	</toto>    
    </toto>
    Voici le fichier que je souhaite obtenir:
    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
     
    		<Item id="2">
    			<Field name="identifiant">value1</Field>
    			<Children>
    				<Item id="3">			
    					<Field name="identifiant">value2</Field>
    					<Children>
    						<Item id="4">					
    							<Field name="identifiant">value3</Field>
    							<Children>
    								<Item id="5">							
    									<Field name="identifiant">value4</Field>	
    								</Item>	
    								<Item id="6">							
    									<Field name="identifiant">value5</Field>		
    								</Item>	
    							</Children>																
    						</Item>	
    					</Children>
    				</Item>	
    				<Item id="7">			
    					<Field name="identifiant">value6</Field>
    					<Children>
    						<Item id="8">						
    							<Field name="identifiant">value7</Field>
    						</Item>
    					</Children>
    				</Item>	
    			</Children>
    		</Item>
    Le but est donc d'effectuer un travail de fond sur l'arborescence comme vous l'aurez compris (en incluant au bon endroit la balise <Children> notamment)

    Merci d'avance pour votre aide!

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ça a l'air plutôt simple en faisant une structure du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="toto">
      <bidule>
        <xsl:apply-templates/>    
      </bidule>
    </xsl:template>
    Qu'est-ce que tu as essayé jusqu'à maintenant ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Hello,

    Tout d'abord merci pour ton aide et ta réactivité impressionnante...

    J'ai mis à jour les fichiers input/output pour t'aider à mieux cerner mon problème.

    Je pense que la solution que tu m'as donnée va me servir. Je n'avais jusque là pas cerné l'utilité et la puissance de la fonction apply-templates (je passais que par du call-template et tentais des choses pour reproduire la structure attendue)

    Le problème maintenant est que la structure que j'obtiens avec ta solution n'est pas bonne.
    En fait l'élément Children pourrait se traduire par : "j'ai un/des fils dans le fichier xml source. En gros le xsd spécifie qu'un élément <Chidlren> a de 1 à N <Item> alors que l'élément <Item> a de 0 à 1 <Children>. Je pense qu'avec le code source output tu comprendras mieux ma problématique.

  4. #4
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Pour info, voici ce que faisait ta solution proposée:

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Children>
      <Item name="value1"/>
      <Children>
        <Item name="value2"/>
        <Children>
          <Item name="value3"/>
          <Children>
            <Item name="value4"/>
          </Children>
          <Children>
            <Item name="value5"/>
          </Children>
        </Children>
        <Children>
          <Item name="value6"/>
          <Children>
            <Item name="value7"/>
          </Children>
        </Children>
      </Children>
    </Children>
    avec le xslt suivant :

    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
     
    <?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"/>
      <xsl:template match="toto">
       <Children>
       <Item>
         		<xsl:attribute name="name">
    				<xsl:value-of select="@name"/>
    			</xsl:attribute>
    	</Item>
    	<xsl:apply-templates />
       </Children>
      </xsl:template>
        </xsl:stylesheet>

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    S'il faut que le children soit encadré par le item, alors encadre le children par le item bien sûr, pas l'inverse.

    Je n'ai pas essayé de te donner la solution et je ne le ferai pas. Je t'ai donné une structure qui montre le fonctionnement dont tu as besoin, et que tu dois adapter à ton propre cas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [XSLT] séquentiel vers arborescent
    Par beber* dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/12/2009, 09h04
  2. [XSLT] noeud à plat >> arborescence
    Par theos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 24/11/2008, 10h09
  3. Réponses: 1
    Dernier message: 27/04/2007, 15h03
  4. [XSLT]Algo pour créer une arborescence
    Par Yudala dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/03/2007, 14h49
  5. [XSLT] xml plat à xml arborescent
    Par enigma dans le forum XSL/XSLT/XPATH
    Réponses: 24
    Dernier message: 24/06/2005, 22h43

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