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]Changement de structure


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut [XSLT]Changement de structure
    Bonjour,

    J'ai un xml :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
        <Entreprise>
          <Des Ein="1" fldID="101">Multi Development Holding AG</Des>
          <Des Ein="2" fldID="101">Multi Development AG</Des>
          <Des Ein="2" fldID="102">(Multi Development SA) (Multi Development Ltd)</Des>
          <Des Ein="3" fldID="102">(Multi Developments SA) (Multi Developments Ltd)</Des>
          <Des Ein="7" fldID="102">(Multi-Developments SA) (Multi-Developments Ltd)</Des>
          <Des Ein="8" fldID="101">MDE Motoren AG</Des>
          <Des Ein="9" fldID="101">(MDE Motoren SA) (MDE Motoren Ltd)</Des>
        </Entreprise>

    et je doit le struturés dans ce schéma en pièce jointe.

    Le problème est que je ne sais pas comment faire?

    Vu que fldID=101 correspond a native et fldID=102 correspond a translations.

    Et donc que pour un 101 il peut y avoir une multitude de 102 jusqu'a ce qu'un autre 101 se présente dans la séquence et la faut créer un autre élément name.

    Le résultat que je souhaite obtenir pour cet exemple est :

    Code XML : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <Names>
      <Name>
    	<Native Ein="1">Multi Development Holding AG</Native>
      </Name>
      <Name>
    	<Native Ein="2">Multi Development AG</Native>
    	<translation Ein="2">(Multi Development SA) (Multi Development Ltd)</translation>
    	<translation Ein="3">(Multi Developments SA) (Multi Developments Ltd)</translation>
    	<translation Ein="7">(Multi-Developments SA) (Multi-Developments Ltd)</translation>
      </Name>
      <Name>
    	<Native Ein="8">MDE Motoren AG</Native>
    	<translation Ein="9">(MDE Motoren SA) (MDE Motoren Ltd)</translation>
      </Name>
    </Names>

    Alors si vous pouvez m'aidez ca serait top.

    Merci
    Images attachées Images attachées  

  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,

    Il suffit d'indexer chaque élément « translation » (Des avec fldID="102") par l'identifiant unique de l'élément « Native » (Des avec fldID="101") qui le précède immédiatement. Après, une fois qu'on a trouvé cela, c'est tout simple...
    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
    <?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" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:key name="translations" match="Des[@fldID='102']" use="generate-id(preceding-sibling::Des[@fldID='101'][1])"/>
      <xsl:template match="/Entreprise">
        <Names>
          <xsl:for-each select="Des[@fldID='101']">
            <Name>
              <Native Ein="{@Ein}"><xsl:value-of select="."/></Native>
              <xsl:for-each select="key('translations', generate-id(current()))">
                <translation Ein="{@Ein}"><xsl:value-of select="."/></translation>
              </xsl:for-each>
            </Name>
          </xsl:for-each>
        </Names>
      </xsl:template>
    </xsl:stylesheet>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Waouh!

    Je connaissais pas xsl:key ca a l'air super utile cette fonction!

    Merci beaucoup

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

Discussions similaires

  1. [XSLT] Changement de valeur
    Par bobsaoul dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/05/2008, 14h04
  2. [XSLT] Changement de namespace
    Par BigBarbare dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 14/05/2008, 13h22
  3. Changement de structure d'une table
    Par Alqualonde dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/04/2007, 10h22
  4. [XSLT] Probleme de structure de fichier xsl
    Par ben23 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/07/2006, 10h46
  5. [xslt] Changement de tables, colonnes
    Par moutse dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 24/09/2005, 07h16

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