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 :

Key - multiples documents XML


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut Key - multiples documents XML
    Bonjour, je vous présente mon problème :
    j'ai un fichier avec des id et des labels associés :

    state_solos.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
    15
     
    <?xml version="1.0"?>
    <!-- key_state.xml -->
    <Procedure>
    	<StateType Id="MAT.REC" aName="description 1"/>
    	<StateType Id="MAT.ETU" aName="description 2"/>
    	<StateType Id="MAT.DOS" aName="description 3"/>
    	<StateType Id="OUT.REC" aName="description 4"/>
    	<StateType Id="OUT.MON" aName="description 5"/>
    	<StateType Id="OUT.CAB" aName="description 6"/>
    	<StateType Id="OUT.ADA" aName="description 7"/>
    	<StateType Id="OUT.TES" aName="description 8"/>
    	<StateType Id="ROB.UTI" aName="description 9"/>
    	<StateType Id="PHA.INS" aName="description 10"/>
    </Procedure>
    un fichier contenant un rapport avec des activités qui ont pluiseurs états

    one_activity.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
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?xml version="1.0" encoding="ASCII"?>
    <air:Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:air="http://www.scopp.org/air" xmlns:b2mml="http://www.wbf.org/xml/b2mml" xmlns:extensions="http://www.wbf.org/xml/b2mml-extensions" xmlns:scada="http://www.scopp.org/scada" ContactCustomer="M. Doe" Customer="Mr Client" Description="description lambda"  RefCustom="T5E8ZA" RefERP="PPP105682" State="EDITED">
    	<air:Session>
    		<air:Activity BeginDate="2011-01-24T09:32:30.831+01:00" EndDate="2011-01-24T09:43:37.355+01:00">
    		  <air:Type>FER.OUT.SOL</air:Type>
    		  <air:State>
    			<air:State>
    			  <air:Type>MAT.REC</air:Type>
    			  <air:Value>UNDEFINED</air:Value>
    			</air:State>
    			<air:State>
    			  <air:Type>OUT.MON</air:Type>
    			  <air:Value>FALSE</air:Value>
    			</air:State>
    		  </air:State>
    		  <air:Event Date="2011-01-24T09:43:37.355+01:00" Description="">
    			<air:Type>BAGUE.AUTRE</air:Type>
    		  </air:Event>
    		</air:Activity>
    	</air:Session>
    </air:Report>
    enfin le fichicer xsl de transformation

    simple_mapping.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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" 
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:air="http://www.scopp.org/air" >
     
    	<xsl:output method="text"/>
     
    	<!-- Assign contents of key_state.xml to var -->
    	<xsl:variable name="ProceduresLookup" select="document('state_solos.xml')"/>
     
    	<xsl:variable name="newline">
    		<xsl:text>
    		</xsl:text>
    	</xsl:variable>
     
    	<!-- Define key -->
    	<xsl:key name="procedureKey" match="//Procedure/StateType" use="@Id"/>
     
    	<!-- Plug in key value -->
    	<xsl:template match="//air:Type">
    		<!--<xsl:variable name="type" select="substring-after(.,'#')"/>-->
    		<xsl:variable name="type" select="."/>
    		<xsl:for-each select="$ProceduresLookup">
    			<xsl:value-of select="$type"/> correspond a <xsl:value-of select="key('procedureKey', $type)"/> ++++++++
    			<xsl:value-of select="$newline"/>
    			<xsl:text>. </xsl:text>
    		</xsl:for-each>
    	</xsl:template>
    </xsl:stylesheet>
    l'idée est de charger les états avec l'instruction key et de générer une sortie pour laquelle les id de types d'état sont remplacés par leur description aName.

    Mon soucis est que les id de statetype ne sont pas trouvés.

    Par exemple, je devrais obtenir
    OUT.MON correspond a description 5

    Je n'arrive pas a savoir si ca vient du tableau associatif qui serait vide, d'ailleurs comment inspecter son contenu avec xmlspy.

    Ou peut-etre du fait que type à l'air de valoir par exemple UNDEFINEDOUT.MON, UNDEFINED provient de la valeur du air:Type précédent.

    La technique provient de l'article suivant http://www.vckbase.com/vckbase/ebook...html/x14-2.htm dont l'exemple produit bien le résultat escompté.

    Merci de toute proposition, idée, support moral ou autre

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut
    bon ben à force de retourner le truc, ca a fini par me sauter au yeux

    dans le xsd, il fallait tout simplement taper sur l'attribut

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$type"/> correspond a <xsl:value-of select="key('procedureKey', $type)/@aName"/> ++++++++
    par contre je ne sais pas pourquoi le noeud air:Value est affiché à l'écran :s

    et pourquoi je n'arrive pas à sauter de ligne

  3. #3
    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
    Citation Envoyé par samcfc Voir le message
    par contre je ne sais pas pourquoi le noeud air:Value est affiché à l'écran :s
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="type" select="."/>
    ...
    <xsl:value-of select="$type"/>
    Citation Envoyé par samcfc Voir le message
    et pourquoi je n'arrive pas à sauter de ligne
    Je suppose que tu affiches le résultat dans un navigateur ? Auquel cas le saut de ligne se fait via un <br/>. Ou alors tu écris l'ensemble de ton résultat dans une balise <pre> (ou une balise avec un style white-space:nowrap appliqué dessus).

  4. #4
    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
    Citation Envoyé par samcfc Voir le message
    par contre je ne sais pas pourquoi le noeud air:Value est affiché à l'écran :s
    Sauf indication contraire, XSLT rapporte les nœuds textes tels que.

    T'as qu'à ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="/">
      <xsl:apply-templates select="//air:Type"/>
    </xsl:template>
    Ce qui exclura du traitement tout ce qui n'est pas <air:Type>

    Citation Envoyé par samcfc Voir le message
    et pourquoi je n'arrive pas à sauter de ligne
    Ça a l'air correct, 'faudrait que j'essaie.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut
    merci, effectivement, ca marche

    j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    description 2 description 1 description 5 BAGUE.AUTRE
    pour le saut de ligne cest pas primordial, vu que le code était juste pour tester le fonctionnement de key et que dans le reste du projet ca ne devrait pas me servir à priori...

    mais je vais quand meme (re)faire des recherches par curiosité

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

Discussions similaires

  1. Mapping XML foreign key multiples
    Par CheepCheep dans le forum JPA
    Réponses: 3
    Dernier message: 30/09/2014, 13h24
  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