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 :

[XSLT] Fusion de fichier XML ???


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut [XSLT] Fusion de fichier XML ???
    Bonjour à tous,

    J'aurai besoin de savoir si je peux faire ce genre de chose en XML et c'est assez urgent, merci à tous ceux qui pourront m'aider...

    Le principe :
    Une application doit lire un fichier XML dont la forme respecte une DTD ou XSCHEMA (on va l'appeler fichier 1). Jusqu'ici rien de compliqué.

    Seulement, dans un autre fichier XML (fichier 2) j'ai du contenu qui doit être, lui aussi, lu par l'application. Ce contenu respecte une autre DTD ou XSCHEMA.

    Je ne dispose que de la technologie XML (autrement dit XSL également).

    L'idée que j'ai est de lié le premier fichier (fichier 1) à une feuille de style XSL qui va chercher le contenu du fichier 2. Ainsi l'application qui ouvrira le fichier 1 pourra récupérer les infos du fichier 2.

    Est-ce possible ?

    Si vous savez que c'est possible ou si vous pensez que c'est impossible, votre réponse m'intéresse.

    Bonne journée à tous

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

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

    à partir d'une feuille de style XSLT, il est tout à fait possible d'accéder à un autre fichier XML que celui en cours de transformation avec la fonction XPath document().

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut
    Ok, merci beaucoup.

    Aurai-tu un exemple de code ?
    Ou un tutoriel sympa ?

    Merci encore GrandFather

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Voici un exemple détaillé:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
     
    Exemple d’utilisation de la fonction document() :
     
    Nous reprenons les documents Fabienne.xml et ClementEspNom.xml que nous avions utilisés au chapitre 061 Intégration pour produire le document ToutesCritiques.xml qui intégrait les documents Fabienne.xml et ClementEspNom2.xml. Nous avions dû faire appel à des import, un pour Fabienne.xsl et un autre pour ClementEspNom.xsl qui traitait un espace de nom. Si vous ne vous rappelez pas la situation, allez voir ce chapitre à la page 11. De toute façon voici les documents utilisés :
     
    Fabienne.xml
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <critiq>
      <auteur>Fabienne Dupont</auteur>
      <film titre="Vertigo" note="2">J'ai bien aimé.</film>
      <film titre="Sleepy Hollow" note="1">Je n'ai vraiment pas aimé.</film>
    </critiq>
     
    ClementEspNom.xml
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <film xmlns="http://clement-dupont.fr/">
    	<titre>Vertigo</titre>
    	<note>10</note>
    	<critique>C'est un excellent film.</critique>
    </film>
     
    Au départ de ces deux documents, nous souhaitons obtenir le document ToutesCritiquesEspNom.xml qui sera conforme à ToutesCritiquesEspNom.dtd :
     
    ToutesCritiquesEspNom.dtd 
     
    <!ELEMENT critiques (critique)+>
    <!ELEMENT critique (auteur, film, contenu)>
    <!ELEMENT auteur (#PCDATA)>
    <!ELEMENT film (#PCDATA)>
    <!ELEMENT contenu (#PCDATA)>
    <!ATTLIST critique  note  CDATA #REQUIRED>
     
    Au chapitre 061 Integration nous avion produit le document :
     
    ToutesCritiquesEspNom.xml
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    < !DOCTYPE critiques SYSTEM "ToutesCritiquesEspNom.dtd">
    <critiques>
    <critique note="10">
    <auteur>Clément Dupont</auteur>
    <film>Vertigo</film>
    <contenu>C'est un excellent film.</contenu>
    </critique>
    <critique note="7">
    <auteur>Fabienne Dupont</auteur>
    <film>Vertigo</film>
    <contenu>J'ai bien aimé.</contenu>
    </critique>
    <critique note="3">
    <auteur>Fabienne Dupont</auteur>
    <film>Sleepy Hollow</film>
    <contenu>Je n'ai vraiment pas aimé.</contenu>
    </critique>
    </critiques>
     
    Pour cela, nous avions créé le document 
    CritiquesEspNom.xml
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE critiques [
    <!ENTITY source1 SYSTEM "ClementEspNom.xml">
    <!ENTITY source2 SYSTEM "Fabienne.xml">
    ]>
    <critiques>
    	&source1;
    	&source2;
    </critiques>
     
    auquel nous avions appliqué la feuille
    ToutesCritiquesEspNom.xsl
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:import href="ClementEspNom.xsl"/>
      <xsl:import href="Fabienne.xsl"/>
      <xsl:output method="xml" encoding="iso-8859-1" indent="yes"
                  doctype-system="ToutesCritiquesEspNom.dtd" />
     
      <xsl:template match="critiques">
    	<critiques>
    	   <xsl:apply-templates select="*"/>
    	</critiques>
      </xsl:template>
     
    </xsl:stylesheet>
     
    qui « importait » les documents Fabienne.xsl et ClementEspNom.xsl ci-dessous :
     
    Fabienne.xsl
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" encoding="iso-8859-1" indent="yes"/>
      <xsl:template match="critiq">
    	<xsl:apply-templates select="film"/>
      </xsl:template>
     
      <xsl:template match="film">
        <critique note="{round((@note*10) div 3)}">
    	<auteur><xsl:value-of select="../auteur"/></auteur>
    	<film><xsl:value-of select="@titre"/></film>
    	<contenu><xsl:value-of select="text()"/></contenu>
        </critique>
      </xsl:template>
     
      <!--pour ne pas insérer le nom de l'auteur une deuxième fois-->
      <xsl:template match="auteur"/>
    </xsl:stylesheet>
     
    ClementEspNom.xsl
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:ext="http://clement-dupont.fr/"
    	exclude-result-prefixes="ext">
      <xsl:output method="xml" encoding="iso-8859-1" indent="yes"/>
      <xsl:template match="ext:film">
        <critique note="{ext:note}">
    	<auteur>Clément Dupont</auteur>
    	<film><xsl:value-of select="ext:titre"/></film>
    	<contenu><xsl:value-of select="ext:critique"/></contenu>
        </critique>
      </xsl:template>
    </xsl:stylesheet>
     
    Au lieu de cela nous allons, maintenant, utiliser la fonction document() pour analyser un deuxième document, Fabienne.xml p.ex, pendant l’application de la feuille ToutesCritiquesEspNom.xsl à ClementEspNom.xml.
    Voici la nouvelle version de ToutesCritiquesEspNom.xsl renommée pour l’occasion ToutesCritiquesEspNomDoc.xsl :
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0"
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xmlns:ext="http://clement-dupont.fr/"
    	exclude-result-prefixes="ext">
      <xsl:import href="ClementEspNom.xsl"/>
      <!--xsl:import href="Fabienne.xsl"/-->
      <xsl:output method="xml" encoding="iso-8859-1" indent="yes"
                  doctype-system="ToutesCritiquesEspNom.dtd"/>
     
      <xsl:template match="/">
    	<critiques>
    	   <xsl:apply-templates select="ext:film"/>
    	   <xsl:variable name="nomFich" select="document('Fabienne.xml')"/>
    	   <xsl:apply-templates select="$nomFich/critiq/film"/>
    	</critiques>
      </xsl:template>
     
      <xsl:template match="film">
        <critique note="{round((@note*10) div 3)}">
              <auteur><xsl:value-of select="../auteur"/></auteur>
              <film><xsl:value-of select="@titre"/></film>
              <contenu><xsl:value-of select="text()"/></contenu>
        </critique>
      </xsl:template>
     
    </xsl:stylesheet>
     
    Nous avons mis en gras les points importants.
    Nous avons supprimé l’import de Fabienne.xsl,
    Nous avons assigné à la variable nomFich le résultat de la fonction document(), la racine de l’arbre du document Fabienne.xml, et nous avons lancé un apply-templates avec les données nécessaires pour le traitement du document Fabienne.xml. C’est la règle « film » qui effectue le traitement.
    En fait la fonction document() renvoie la racine de l’arbre du document qui lui est passé par paramètre. Une fois la racine connue, les chemins XPath fonctionnent comme ailleurs.

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

Discussions similaires

  1. [XSLT] Fusion de fichiers XML par XSLT
    Par 84mickael dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 14/04/2008, 21h26
  2. [XSLT] Création de fichier XML dynamique avec PHP
    Par daninho dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 02/02/2006, 11h18
  3. [xslt] Parser 2 fichiers XML
    Par malekms dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/12/2005, 12h22
  4. fusion de fichiers XML et access 2003
    Par frdek dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 29/11/2005, 11h23
  5. [XSLT] Diviser un fichiers xml en plusieurs pages html
    Par thibaut06 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/04/2005, 16h56

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