Re: XSL unique pour XML différent
COUTHURES Alain <[email protected]> Fri, 06 Apr 2007 11:47:57 +0200
| Newsgroups | gmane.text.xml.french.tech |
|---|---|
| Message-ID | <[email protected]> |
J'ai une question complémentaire :
Je m'aperçois que le document XML n'est pas homogène dans sa logique...
Parfois on a un noeud du style :
<A>
<B>val1</B>
<C>
<D>
<E>val2</E>
</D>
<D>
<E>val3</E>
</D>
</C>
</A>
et d'autres fois, on ne met pas le noeud de regroupement C :
<A>
<B>val1</B>
<D>
<E>val2</E>
</D>
<D>
<E>val3</E>
</D>
</A>
Faire un algo pour un document avec regroupement systématique (ou
l'inverse) serait plus simple que de faire un algo combinant ces deux
possibilités...
A chaque fois que je construis moi-même un document XML, je me pose
toujours la question de mettre ou non un noeud de regroupement mais ne
serait-il pas possible pour vous de choisir une seule logique, une fois
pour toute, dans un même document ?
Alain COUTHURES
<agenceXML>
http://www.agencexml.com
Thibaut Gabelle a écrit :
> Là j'ai pris un exemple parmi d'autres, on pourrait très bien avoir quelque
> chose de complètement différent (la liste des mères et ses enfants...)
> Donc la profondeur est constante, mais par type de XML.
>
> -----Message d'origine-----
> De : [email protected] [mailto:[email protected]] De la part
> de COUTHURES Alain
> Envoyé : vendredi 6 avril 2007 09:25
> À : [email protected]
> Objet : [xml-tech] Re: XSL unique pour XML différent
>
> Re-bonjour,
> Ca devient plus clair pour moi avec l'exemple concret !
>
> Est-ce que, en fait, la profondeur des éléments est constante ? On a
> toujours /root/structure/suivi-budg/exercice/section/budget ?
>
> Alain COUTHURES
> <agenceXML>
> http://www.agenceXML.com
>
> Thibaut Gabelle a écrit :
>
>> Bonjour et merci pour votre attention,
>>
>> En fait ce XML est le résultat d'une recherche. Et je veux donc afficher
>>
> ce
>
>> résultat qui est représenté de manière arborescente dans le XML de manière
>> "aplatie" en HTML.
>> Donc en fait dans mon tableau j'aurais une ligne par élément de premier
>> niveau, ensuite autant de colonne que s'il y a d'éléments "non racine"
>>
> sous
>
>> la forme <nom-element>val-element</nom-element>.
>>
>> Si je prends un exemple de XML plus concret. Les budgets par exercice et
>>
> par
>
>> section d'une liste de structure.
>> Voilà le XML de départ (qui sera donc répété pour X structure) : le nombre
>> de section, d'exercice, de budget, étant totalement variable.
>>
>> <root>
>> <structure>
>> <libelle>xmlfr.org</libelle>
>> <type-str>Site internet</type-str>
>> <suivi-budg>
>> <exercice>
>> <annee>2006</annee>
>> <plan>M22</plan>
>> <section>
>> <type>Hébergement</type>
>> <budget>
>> <libelle-budg>Budget Herbergement proposé</libelle-budg>
>> <type-budg>B</type-budg>
>> </budget>
>> <budget>
>> <libelle-budg>Budget Herbergement alloué</libelle-budg>
>> <type-budg>B</type-budg>
>> </budget>
>> </section>
>> <section>
>> <type>Restauration</type>
>> <budget>
>> <libelle-budg>Budget Restau proposé</libelle-budg>
>> <type-budg>B</type-budg>
>> </budget>
>> </section>
>> </exercice>
>> <exercice>
>> <annee>2007</annee>
>> <plan>M22</plan>
>> <section>
>> <type>Hébergement</type>
>> <budget>
>> <libelle-budg>Budget Herbergement proposé</libelle-budg>
>> <type-budg>B</type-budg>
>> </budget>
>> </section>
>> <section>
>> <type>Restauration</type>
>> <budget>
>> <libelle-budg>Budget Restau proposé</libelle-budg>
>> <type-budg>B</type-budg>
>> </budget>
>> <budget>
>> <libelle-budg>Budget Restau proposé 2</libelle-budg>
>> <type-budg>B</type-budg>
>> </budget>
>> <budget>
>> <libelle-budg>Budget Restau alloué</libelle-budg>
>> <type-budg>B</type-budg>
>> </budget>
>> </section>
>> </exercice>
>> <suivi-budg>
>> <structure>
>> </root>
>>
>> Voilà le HTML souhaité
>>
>> <TABLE>
>> <TR>
>> <TD>xmlfr.org</TD>
>> <TD>Site internet</TD>
>> <TD>
>> <TABLE>
>> <TR>
>> <TD>2006</TD>
>> <TD>M22</TD>
>> <TD>
>> <TABLE>
>> <tr>
>> <td>Hébergement</td>
>> <td>
>> <table>
>> <tr>
>> <td>Budget Herbergement proposé</td>
>> <td>B</td>
>> </tr>
>> <tr>
>> <td>Budget Herbergement alloué</td>
>> <td>B</td>
>> </tr>
>> </table>
>> </td>
>> </tr>
>> <tr>
>> <td>Restauration</td>
>> <td>
>> <table>
>> <tr>
>> <td>Budget Restau proposé</td>
>> <td>B</td>
>> </tr>
>> </table>
>> </td>
>> </tr>
>> </table>
>> </TD>
>> </TR>
>> <TR>
>> <TD>2007</TD>
>> <TD>M22</TD>
>> <TD>
>> <table>
>> <tr>
>> <td>Hébergement</td>
>> <td>
>> <table>
>> <tr>
>> <td>Budget Herbergement proposé</td>
>> <td>B</td>
>> </tr>
>> </table>
>> </td>
>> </tr>
>> <tr>
>> <td>Restauration</td>
>> <td>
>> <table>
>> <tr>
>> <td>Budget Restau proposé 1</td>
>> <td>B</td>
>> </tr>
>> <tr>
>> <td>Budget Restau proposé 2</td>
>> <td>B</td>
>> </tr>
>> <tr>
>> <td>Budget Restau alloué</td>
>> <td>B</td>
>> </tr>
>> </table>
>> </td>
>> </tr>
>> </table>
>> </TD>
>> </TR>
>> </TABLE>
>> </TD>
>> </TR>
>> </TABLE>
>>
>> -----Message d'origine-----
>> De : [email protected] [mailto:[email protected]] De la
>>
> part
>
>> de COUTHURES Alain
>> Envoyé : vendredi 6 avril 2007 06:47
>> À : [email protected]
>> Objet : [xml-tech] Re: XSL unique pour XML différent
>>
>> Bonjour,
>>
>> J'ai du mal à comprendre la structure des fichiers en question...
>>
>> A la lecture, il me semble que ce sont les éléments col1, col2, col3 et
>> col4 (est-ce limité à 4 ?) qui doivent être "simplement" présentés dans
>> une table avec saut de ligne chaque fois que l'ordre des colonnes
>> l'impose et indépendamment de leurs parents.
>>
>> L'exemple XSL joint crée des tables HTML imbriquées : est-ce bien ce qui
>> doit être construit ?
>>
>> Bien cordialement,
>>
>> Alain COUTHURES
>> <agenceXML>
>> http://www.agenceXML.com
>>
>> Thibaut Gabelle a écrit :
>>
>>
>>> Bonjour,
>>>
>>>
>>> Voici mon besoin : je veux appliquer une transformation XSLT à des
>>>
>>>
>> fichiers
>>
>>
>>> XML pouvant avoir une structure différente, (1-n ; 1-n-n ;...) et pour
>>>
>>>
>> lequel
>>
>>
>>> je ne connais pas le nom des éléments.
>>> Ci-dessous des exemples de XML avec le résultat souhaité en HTML.
>>>
>>> Je voudrais savoir si cela est réellement faisable, sachant que je veux
>>> qu'un seul XSL générique.
>>>
>>> Je débute dans ce domaine et pour l'instant, les XSL que j'arrive à faire
>>>
>>>
>> ne
>>
>>
>>> répondent pas à tous les cas de figure.
>>>
>>>
>>>
>>> Merci beaucoup.
>>>
>>>
>>>
>>> Exemple de XSL
>>>
>>>
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>>
>>> <xsl:stylesheet version="1.0"
>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>>>
>>> <xsl:output method="html" indent="yes"/>
>>>
>>>
>>>
>>> <!-- Template colonne -->
>>>
>>> <xsl:template name="colonne">
>>>
>>> <xsl:if test="count(*) >= 1">
>>>
>>> <td>
>>>
>>> <table border="1">
>>>
>>> <xsl:for-each select="*">
>>>
>>> <tr>
>>>
>>> <xsl:call-template name="colonne"/>
>>>
>>> </tr>
>>>
>>> </xsl:for-each>
>>>
>>> </table>
>>>
>>> </td>
>>>
>>> </xsl:if>
>>>
>>> <xsl:if test="count(*) = 0">
>>>
>>> <td><xsl:value-of select="."/></td>
>>>
>>> </xsl:if>
>>>
>>> </xsl:template>
>>>
>>> <!-- Fin Template colonne -->
>>>
>>>
>>>
>>> <xsl:template match="root">
>>>
>>> <table border="1">
>>>
>>>
>>>
>>> <!-- Pour Chaque ligne -->
>>>
>>> <xsl:for-each select="*">
>>>
>>> <tr>
>>>
>>> <!-- Colorer une ligne sur 2 -->
>>>
>>> <xsl:if test="(position() mod 2)=0">
>>>
>>> <xsl:attribute name="bgcolor">green</xsl:attribute>
>>>
>>> </xsl:if>
>>>
>>>
>>>
>>> <!-- Pour chaque colonne -->
>>>
>>> <xsl:for-each select="*">
>>>
>>> <xsl:call-template name="colonne"/>
>>>
>>> </xsl:for-each>
>>>
>>> </tr>
>>>
>>> </xsl:for-each>
>>>
>>>
>>>
>>> </table>
>>>
>>> </xsl:template>
>>>
>>>
>>>
>>> </xsl:stylesheet>
>>>
>>>
>>>
>>> Exemple XML 1
>>>
>>>
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>>
>>> <root>
>>>
>>> <noeud>
>>>
>>> <col1>Val 1</col1>
>>>
>>> <col2>Val 2</col2>
>>>
>>> <col3>Val 3</col3>
>>>
>>> </noeud>
>>>
>>> <noeud>
>>>
>>> <col1>Val 1</col1>
>>>
>>> <col2>Val 2</col2>
>>>
>>> <col3>Val 3</col3>
>>>
>>> <elements>
>>>
>>> <element>
>>>
>>> <col4>Val 4</col4>
>>>
>>> </element>
>>>
>>> <element>
>>>
>>> <col4>Val 4</col4>
>>>
>>> </element>
>>>
>>> </elements>
>>>
>>> </noeud>
>>>
>>> </root>
>>>
>>>
>>>
>>> Résultat HTML 1 souhaité
>>>
>>>
>>> -------Val1-----Val2-----Val3
>>> -------Val1-----Val2-----Val3-----Val4------
>>> -----------------------------------------Val4------
>>>
>>>
>>>
>>> Exemple XML 2
>>>
>>>
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>>
>>> <root>
>>>
>>> <noeud1>
>>>
>>> <col1>Val1</col1>
>>>
>>> <noeud2>
>>>
>>> <col2>Val2</col2>
>>>
>>> <noeud3>
>>>
>>> <col3>Val3</col3>
>>>
>>> </noeud3>
>>>
>>> <noeud3>
>>>
>>> <col3>Val4</col3>
>>>
>>> </noeud3>
>>>
>>> </noeud2>
>>>
>>> </noeud1>
>>>
>>> <noeud1>
>>>
>>> <col1>Val1</col1>
>>>
>>> <noeud2>
>>>
>>> <col2>Val2</col2>
>>>
>>> <noeud3>
>>>
>>> <col3>Val3</col3>
>>>
>>> </noeud3>
>>>
>>> </noeud2>
>>>
>>> </noeud1>
>>>
>>> </root>
>>>
>>>
>>>
>>> Résultat HTML 2 souhaité
>>>
>>>
>>>
>>> -------Val1-----Val2-----Val3
>>> ------------------------------Val4
>>> -------Val1-----Val2-----Val3
>>>
>>>
>>>
>>> Exemple XML 3
>>>
>>>
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>>
>>> <root>
>>>
>>> <noeud1>
>>>
>>> <col1>Val1</col1>
>>>
>>> <noeud2>
>>>
>>> <noeud3>
>>>
>>> <col2>Val2</col2>
>>>
>>> <noeud4>
>>>
>>> <noeud5>
>>>
>>> <col3>Val3</col3>
>>>
>>> </noeud5>
>>>
>>> <noeud5>
>>>
>>> <col3>Val4</col3>
>>>
>>> </noeud5>
>>>
>>> </noeud4>
>>>
>>> </noeud3>
>>>
>>> </noeud2>
>>>
>>> </noeud1>
>>>
>>> <noeud1>
>>>
>>> <col1>Val1</col1>
>>>
>>> <noeud2>
>>>
>>> <noeud3>
>>>
>>> <col2>Val2</col2>
>>>
>>> <noeud4>
>>>
>>> <noeud5>
>>>
>>> <col3>Val3</col3>
>>>
>>> </noeud5>
>>>
>>> </noeud4>
>>>
>>> </noeud3>
>>>
>>> </noeud2>
>>>
>>> </noeud1>
>>>
>>> </root>
>>>
>>>
>>>
>>> Résultat HTML 3 souhaité
>>>
>>>
>>>
>>> -------Val1-----Val2-----Val3
>>> ------------------------------Val4
>>> -------Val1-----Val2-----Val3
>>>
>>>
>>>
>>>
>>>
>>> --
>>> Devenez redacteur <XML>fr et contribuez au developpement du
>>> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>>>
>>> Liste de diffusion "[email protected]" (http://xmlfr.org).
>>>
>>> Cette liste est a votre disposition pour discuter en francais de
>>> tout sujet technique lie a XML.
>>>
>>> Pour resilier votre abonnement, envoyez un message contenant
>>> la commande "unsubscribe" a [email protected]
>>> (mailto:[email protected]?Subject=unsubscribe)
>>>
>>>
>>>
>>>
>>>
>> --
>> Devenez redacteur <XML>fr et contribuez au developpement du
>> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>>
>> Liste de diffusion "[email protected]" (http://xmlfr.org).
>>
>> Cette liste est a votre disposition pour discuter en francais de
>> tout sujet technique lie a XML.
>>
>> Pour resilier votre abonnement, envoyez un message contenant
>> la commande "unsubscribe" a [email protected]
>> (mailto:[email protected]?Subject=unsubscribe)
>>
>>
>>
>>
>> --
>> Devenez redacteur <XML>fr et contribuez au developpement du
>> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>>
>> Liste de diffusion "[email protected]" (http://xmlfr.org).
>>
>> Cette liste est a votre disposition pour discuter en francais de
>> tout sujet technique lie a XML.
>>
>> Pour resilier votre abonnement, envoyez un message contenant
>> la commande "unsubscribe" a [email protected]
>> (mailto:[email protected]?Subject=unsubscribe)
>>
>>
>>
>>
>
>
>
> --
> Devenez redacteur <XML>fr et contribuez au developpement du
> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>
> Liste de diffusion "[email protected]" (http://xmlfr.org).
>
> Cette liste est a votre disposition pour discuter en francais de
> tout sujet technique lie a XML.
>
> Pour resilier votre abonnement, envoyez un message contenant
> la commande "unsubscribe" a [email protected]
> (mailto:[email protected]?Subject=unsubscribe)
>
>
>
>
> --
> Devenez redacteur <XML>fr et contribuez au developpement du
> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>
> Liste de diffusion "[email protected]" (http://xmlfr.org).
>
> Cette liste est a votre disposition pour discuter en francais de
> tout sujet technique lie a XML.
>
> Pour resilier votre abonnement, envoyez un message contenant
> la commande "unsubscribe" a [email protected]
> (mailto:[email protected]?Subject=unsubscribe)
>
>
>