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

XML/XSL et SOAP Discussion :

Document XML chapeau


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Par défaut Document XML chapeau
    Bonjour,

    je débute avec XML alors ma question est peut être basique. Est -il possible de faire un document XML chapeau qui "téférence" plusieurs sous documents XML. Je m'explique:

    j'ai deux doc SessionStart.xml et SessionStop.xml auxquels je voudrais appliquer une seule transformation XSL. Mon idée est de faire

    - un document Chapeau.xml "référençant" SessionStart.xml et SessionStop.xml
    - appliquer la transformation XSL à Chapeau.xml.

    Y-a-t-il un mécanisme dans xml qui permette de faire ça ?

    merci de votre aide.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    En XML, rien de très bien géré pour faire ça, non.

    Mais XSLT y pourvoie assez bien avec sa fonction XPath document().

    Pour donner un exemple :

    chapeau.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <chapeau>
      <include uri="SessionStart.xml"/>
      <include uri="SessionStop.xml"/>
    </chapeau>
    stylesheet.xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:template match="include">
        <xsl:apply-templates select="document(@uri)"/>
      </xsl:template>
     
      <xsl:template match="chapeau">
        <root>
           <xsl:apply-templates/>
        </root>
      </xsl:template>
    </xsl:stylesheet>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    en effet, XML lui-même ne te permettra pas de faire cela.

    Hormis l'utilisation de la fonction document() en XSLT, le framework Cocoon peux concaténer des documents XML, ou réaliser des inclusions (avec XInclude) de document XML ou des fragments XML.

  4. #4
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Par défaut
    Citation Envoyé par thelvin Voir le message
    En XML, rien de très bien géré pour faire ça, non.

    Mais XSLT y pourvoie assez bien avec sa fonction XPath document().

    ....
    Hmmm.... je n'y avais pas pensé . Je vais essayer ça tout de suite.

    merci beaucoup


  5. #5
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Par défaut
    Citation Envoyé par thelvin Voir le message
    En XML, rien de très bien géré pour faire ça, non.

    Mais XSLT y pourvoie assez bien avec sa fonction XPath document().

    [/code]
    euh.. je crois que je n'ai pas tout a fait compris.

    Je part du fichier Session.xml suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> 
    <index>
       <StartSession uri="session_start.xml"/> 
       <StopSession uri="session_stop.xml"/> 
    </index>
    Le document session_start.xml contient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     
    <SessionElem>
        <state>started</state>
        <startstop>Start</startstop>
        <sessionID>fa588ee7-78a6-483a-8cdb-a01f804b92af</sessionID>
    </SessionElem>
    (idem pour session_stop.xml : mêmes noeuds, mais pas les mêmes valeurs. ça va poser un probleme ?)

    j'applique à Session.xml la transformation Session.xsl suivante :
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:output method="text"/>
     
      <xsl:template match="StartSession">
          <xsl:apply-templates select= "document(@uri)"/>
      </xsl:template>
     
      <xsl:template match="index">
           <xsl:apply-templates/>
      </xsl:template>
      
      
      <xsl:template match="SessionElem">
         	<xsl:value-of select="state"
      </xsl:template>
    
     
    </xsl:stylesheet>


    Je pensais que , après avoir exécuté la fonction document(@uri) on ramenait les noeuds de start_session.xml et qu'on pouvait définir des template sur les noeuds de start_session.xml. Par exemple

    <xsl:template match="SessionElem">
    <xsl:value-of select="state">
    </xsl:template>

    Mais apparemment ça ne fonctionne pas. On passe bien dans les deux premiers template mais pas dans le dernier. Il ya surement quelque chose que je n'ai pas compris.


  6. #6
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Par défaut
    Hmm.. ce sui ne marche pas c'est document(@uri).
    En revanche document(concat(@uri, ' ')) fonctionne (conacténation de l'uri avec une chaine vide.


Discussions similaires

  1. Serialiser de gros documents XML
    Par philemon_siclone dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 17/09/2003, 15h26
  2. recherche dans un document xml via DOM
    Par ndoye_zaff dans le forum APIs
    Réponses: 5
    Dernier message: 11/06/2003, 14h44
  3. Réponses: 3
    Dernier message: 03/06/2003, 13h16
  4. Stocker du texte mis en forme dans un document XML
    Par ovh dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 13/02/2003, 10h23
  5. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53

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