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] Filtrer un document XML sur seulement certains noeuds


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Points : 40
    Points
    40
    Par défaut [XSLT] Filtrer un document XML sur seulement certains noeuds
    Bonjour à tous.

    J'ai un document XML, et j'aimerais le filtrer avec une transformation XSL pour ne garder que quelques noeuds.

    Mon problème est que mes balises <xsl:template> ne sont pas reconnues on dirait, et en sortie j'ai tout le texte du document XML...

    Je pense que ça vient d'un problème de namespace mais je ne m'en sort pas...

    Merci donc de votre aide.

    Mon fichier XML en entrée (comme il est trop long, j'ai enlevé quelques infos) :

    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
     
    <HotelDescriptiveMessage xmlns="http://www.opentravel.org/OTA/2005/12">
      <HotelDescriptiveContents HotelCode="14338">
        <HotelDescriptiveContent>
          <HotelInfo>
            <HotelName>LA CAPUCCINA</HotelName> 
            <CategoryCodes>
              <LocationCategory Code="3" CodeDetail="OTA" /> 
            </CategoryCodes>
            <Languages>
              <Language Language="EN" /> 
              <Language Language="IT" /> 
              <Language Language="ES" /> 
            </Languages>
          </HotelInfo>
          <ContactInfos>
            <ContactInfo>
              <Addresses>
                <Address>
                  <AddressLine>Via Novara, 19/B</AddressLine> 
                  <CityName>CUREGGIO</CityName> 
                  <PostalCode>28060</PostalCode> 
                  <CountryName Code="IT">ITALIA</CountryName> 
                </Address>
              </Addresses>
              <Phones>
                <Phone CountryAccessCode="39" PhoneNumber="0322839930" PhoneLocationType="3" /> 
                <Phone CountryAccessCode="39" PhoneNumber="0322839930" PhoneLocationType="4" /> 
              </Phones>
              <Emails>
                <Email EmailType="2">mail@hotel.com</Email> 
              </Emails>
            </ContactInfo>
          </ContactInfos>
        </HotelDescriptiveContent>
      </HotelDescriptiveContents>
    </HotelDescriptiveMessage>
    Et j'aimerais avoir ce fichier XML en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <Hotel id="14338">
      <HotelName>LA CAPUCCINA</HotelName> 
      <HotelLocation Code="3" /> 
      <CityName>CUREGGIO</CityName> 
      <PostalCode>28060</PostalCode> 
      <CountryName>ITALIA</CountryName> 
    </Hotel>
    Voici mon fichier 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <?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"/>
     
        <!-- Balise Root du fichier de sortie -->
        <xsl:template match="HotelDescriptiveContents">
            <xsl:element name="Hotel">
                <xsl:attribute name="id">
                    <xsl:value-of select="@HotelCode" />
                </xsl:attribute>
     
                <xsl:apply-templates />
     
            </xsl:element>
        </xsl:template>
     
        <!-- Récupération du nom de l'hôtel -->
        <xsl:template match="HotelName">
            <xsl:element name="HotelName"><xsl:value-of select="text()" /></xsl:element>
        </xsl:template>
     
        <!-- Récupération de la localisation de l'hôtel -->
        <xsl:template match="LocationCategory">
            <xsl:element name="HotelLocation">
                <xsl:value-of select="@Code" />
            </xsl:element>
        </xsl:template>
     
        <!-- Récupération de l'adresse de l'hôtel -->
        <xsl:template match="Address">
            <xsl:element name="PostalCode"><xsl:value-of  select="PostalCode" /></xsl:element>
            <xsl:element name="CityName"><xsl:value-of    select="CityName" /></xsl:element>
            <xsl:element name="CountryName"><xsl:value-of select="CountryName" /></xsl:element>
        </xsl:template>
     
        <!-- Template par défaut : traite tous les noeuds -->
        <xsl:template match="*">
            <xsl:comment><xsl:value-of select="name()" /></xsl:comment>
            <xsl:apply-templates />
        </xsl:template>
     
    </xsl:stylesheet>
    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Ca devrait marcher:
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:hot="http://www.opentravel.org/OTA/2005/12">
    	<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
     
    	<xsl:template match="/hot:HotelDescriptiveMessage"> 
    		<hot:HotelDescriptiveContents> 
    			<xsl:apply-templates select="hot:HotelDescriptiveContents[@HotelCode='14338']"/> 
    		</hot:HotelDescriptiveContents> 
    	</xsl:template> 
     
        <xsl:template match="hot:HotelDescriptiveContents">
            <hot:Hotel id="{@HotelCode}">
              <xsl:apply-templates select="hot:HotelDescriptiveContent/hot:HotelInfo"/>
    		  <xsl:apply-templates select="hot:HotelDescriptiveContent/hot:ContactInfos/hot:ContactInfo/hot:Addresses/hot:Address"/> 
    		</hot:Hotel>
        </xsl:template>
     
        <xsl:template match="hot:HotelInfo">
            <hot:HotelName><xsl:value-of select="hot:HotelName"/></hot:HotelName> 
    		<hot:HotelLocation Code="{hot:CategoryCodes/hot:LocationCategory/@Code}" /> 
        </xsl:template>    
     
     
        <xsl:template match="hot:Address">
              <hot:CityName>
    		  	<xsl:value-of select="hot:CityName"/> 
              </hot:CityName> 
    		  <hot:PostalCode>
    		  	<xsl:value-of select="hot:PostalCode"/>
    		  </hot:PostalCode> 
    		  <hot:CountryName>
    		  		<xsl:value-of select="hot:CountryName"/>
    		  </hot:CountryName> 
        </xsl:template>
     
     
    </xsl:stylesheet>

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Points : 40
    Points
    40
    Par défaut
    Merci pour ta réponse !

    Effectivement ça fonctionne, nickel merci.
    J'aurais aimé une version où je n'étais pas obligé de mettre le namespace en dur, sachant que celui-ci peut être amené à changer, mais je me contenterai de ça.

    Encore merci pour tout !

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

Discussions similaires

  1. [XSLT] Filtrer un document XML
    Par BakaOnigiri dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/01/2011, 10h33
  2. [XSLT]Recopie de document XML
    Par khamkham dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/04/2010, 14h16
  3. [XSLT] Transformer un Document XML
    Par merlinerick dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 24/05/2009, 17h16
  4. [XSLT] Comparaison 2 documents XML?
    Par Marian83 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 24/04/2009, 15h55
  5. [XML] Outil pour requêter (filtrer) un document xml
    Par aperrin dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 23/08/2006, 09h03

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