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 :

fonction document() (Mise à jour d'un document xml à partir d'un autre)


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    yos
    yos est déconnecté
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Points : 60
    Points
    60
    Par défaut fonction document() (Mise à jour d'un document xml à partir d'un autre)
    Salut tout le monde,
    Afin de compléter un document xml (source.xml) à partir d'un autre xml (manquants.xml) j'utilise la fonction document()
    Voici un exemple:
    source.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <liste>
         <rub titre="A">
             <spe titre="Ab"/>
             <spe titre="Abw"/>
             <spe titre="Abz"/>
         </rub>
         <rub titre="B">
             <spe titre="Ba"/>
             <spe titre="Bc"/>
          </rub>  
    </liste>
    manquants.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <manquant>
         <spe titre="Aa"/>
         <spe titre="Bb"/> 
    </manquant>
    Une fois compléter dans l'ordre de tri voici le résultat souhaité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <liste>
         <rub titre="A">
             <spe titre="Aa"/>
             <spe titre="Ab"/>
             <spe titre="Abw"/>
             <spe titre="Abz"/>
         </rub>
         <rub titre="B">
             <spe titre="Ba"/>
             <spe titre="Bb"/>
             <spe titre="Bc"/>
          </rub>  
    </liste>
    j'ai commencé à écrire cette xslt
    A titre d'exemple:
    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
    <?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" />    
    <xsl:template match="/">
         <xsl:apply-templates select="liste"/>
    </xsl:template >
    <!--pour copier tout le contenu de source.xml-->
    <xsl:template match="*|text()|@*"> 
         <xsl:copy> 
              <xsl:apply-templates select="node()|@*"/> 
         </xsl:copy>
    </xsl:template>  
    <xsl:template match="spe">
       <xsl:for-each select="document('manquant.xml')//spe">
    		<xsl:variable name="ajout" select="@titre"/>
    		<xsl:choose>
    			<xsl:when test="$ajout &lt; current()/@titre">
    			  <spe>
    			     <xsl:attribute name="titre">
    			         <xsl:value-of select="current()/@titre"/>
    			      </xsl:attribute>
                                              </spe>			
    			</xsl:when>
    				<xsl:otherwise>							 
    					<xsl:attribute name="titre">					  				  
    						<xsl:value-of select="$ajout"/>
    					</xsl:attribute>						
    				</xsl:otherwise>
    		</xsl:choose>	
    	</xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>
    merci pour votre aide
    Merci pour votre aide

  2. #2
    yos
    yos est déconnecté
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Points : 60
    Points
    60
    Par défaut
    voici une première réponse sans tri

    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"?> 
    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
    <xsl:output method="xml" indent="yes" encoding="utf-8" />    
    <xsl:template match="/">
         <xsl:apply-templates select="liste"/>
    </xsl:template >
    <!--pour copier tout le contenu de source.xml-->
    <xsl:template match="*|text()|@*"> 
         <xsl:copy> 
              <xsl:apply-templates select="node()|@*"/> 
         </xsl:copy>
    </xsl:template>  
    <xsl:template match="rub">
    	<rub>
                   <xsl:attribute name="titre">
                     <xsl:value-of select="@titre"/>
                   </xsl:attribute>	
                   <xsl:apply-templates select="document('manquant.xml')//spe[substring(@titre,1,1)=substring(current()/@titre,1,1)]"/>
    	   <xsl:apply-templates/>
    	</rub>
    </xsl:template>
    </xsl:stylesheet>

Discussions similaires

  1. Mise-à-jour d'un fichier xml à partir d'un fichier xls
    Par ch.molines dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 13/02/2013, 18h29
  2. Réponses: 2
    Dernier message: 10/06/2012, 21h41
  3. Réponses: 17
    Dernier message: 17/08/2010, 21h59
  4. [XL-2000] Mise à jour d'un fichier excel à partir d'un autre
    Par jejedelbarro dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/04/2009, 18h28
  5. Réponses: 4
    Dernier message: 09/07/2008, 14h05

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