[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:
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:
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:
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.