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 :

un éléments pour hiérarchiser une répétition ? [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut un éléments pour hiérarchiser une répétition ?
    Bonjour

    Comment avec un XLST introduire un éléments pour hiérarchiser une répétition ?.

    J'ai une XSD comme ceci
    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
      <xs:element name="HL7Message">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MSH" type="MSH"/>
            <xs:element name="PID" type="PID"/>
            <xs:element name="PV1" type="PV1"/>
            <xs:sequence maxOccurs="unbounded">
              <xs:element name="ORC" type="ORC"/>
              <xs:element name="RQD" type="RQD"/>
              <xs:element name="TQ1" type="TQ1"/>
              <xs:element name="ZDA" type="ZDA"/>
              <xs:element name="ZDX" type="ZDX"/>
            </xs:sequence>
          </xs:sequence>
        </xs:complexType>
      </xs:element>

    il y a une répétition de la séquence ORC PQD TQ1 ZDA ZDX. je cherche à placer chaque occurrence de cette séquence dans un élément pour 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
      <xs:element name="HL7Message">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MSH" type="MSH"/>
            <xs:element name="PID" type="PID"/>
            <xs:element name="PV1" type="PV1"/>
            <xs:element maxOccurs="unbounded" name="ORDER" type="ORDER"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:complexType name="ORDER">
        <xs:sequence>
          <xs:element name="ORC" type="ORC"/>
          <xs:element name="RQD" type="RQD"/>
          <xs:element name="TQ1" type="TQ1"/>
          <xs:element name="ZDA" type="ZDA"/>
          <xs:element name="ZDX" type="ZDX"/>
        </xs:sequence>
      </xs:complexType>


    merci de votre aide
    A+JYT
    Images attachées Images attachées   

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each-group select="PV1/following-sibling::*" group-starting-with="ORC">
      <ORDER>
        <xsl:copy-of select="current-group()"/>
      </ORDER>
    <xsl:for-each-group>
    ?

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    On peut concevoir les templates qui sont prêts à ajouter à côté de la transformation identique. Avec cette approche, elle devient appliquable aussi bien pour xslt1 que xslt2. Et avec ça, la pointe de focus n'est plus la balise parent de ORC, mais plutôt ORC elle-même. Par conséquence, il n'y a plus xsl:for-each-group qui n'est concevable qu'au point de vue de la balise parent.

    Voici l'une des réalizations possibles des templates mentionnés desus.
    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
    <!-- le template de transformation identique... au-desus -->
    <xsl:template match="HL7Message/ORC">
        <ORDER>
            <xsl:copy-of select="." />
            <xsl:if test="following-sibling::*[1]">
                <xsl:call-template name="group-member">
                    <xsl:with-param name="context" select="following-sibling::*[1]" />
                </xsl:call-template>
            </xsl:if>
        </ORDER>
    </xsl:template>
    <xsl:template name="group-member">
        <xsl:param name="context" />
        <xsl:if test="$context and local-name($context)!='ORC'">
            <xsl:copy-of select="$context" />
            <xsl:call-template name="group-member">
                <xsl:with-param name="context" select="$context/following-sibling::*[1]" />
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
    <xsl:template match="HL7Message/*[local-name()!='ORC' and preceding-sibling::ORC]" />
    <xsl:template match="HL7Message/text()[normalize-space()='']" />
    Bien entendu, il ne serait pas tout à fait pertinent si après les séquences de ORC etc il y avait d'autres éléments soeux qui n'appartient pas au xs:sequence en question. Il faudrait donc faire un peu plus d'effort pour tenir compte ce fait-là.

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Merci à tous les deux

    j'ai avec vos exemple réussi à écrire ma XSLT complète

    A+JYT

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/11/2011, 22h33
  2. Réponses: 7
    Dernier message: 28/01/2011, 10h09
  3. Réponses: 12
    Dernier message: 09/11/2009, 19h56
  4. Réponses: 6
    Dernier message: 19/06/2009, 07h55
  5. Algo le plus rapide pour trouver une répétition ?
    Par AsmCode dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/07/2005, 00h26

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