Cliquez ici.
Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Commentaires et questions non techniques.Commentaires et questions techniques.

 
Cliquez ici.

xml tech : Technologies XML

[xml-tech] Re: Comment hierachisé un doc

[xml-tech] Re: Comment hierachisé un doc

Auteur: Marc <marc.liste@free.fr>
Date: 11/10/2004 - 16:00
X-Mailer: Forte Agent 2.0/32.646

Merci Frederic je suis allé voir les exemples et j'ai refais un exemple épuré de tout le reste.
C'est un peu long .....
Peut être ce la pourra t'il servir à quelqu'un un jour :
------------------------------------------------------
Fichier XML Origine
--------------------------------------------------------
<?xml version="1.0"?>
<Document>
        <Texte Style="Titre1">Texte du titre 1 </Texte>
        <Texte Style="Titre2">Texte du titre 1.1 </Texte>
        <Texte Style="Titre2">Texte du titre 1.2 </Texte>
        <Texte Style="Titre3">Texte du titre 1.2.1 </Texte>
        <Texte Style="Titre1">Texte du titre 2 </Texte>
        <Texte Style="Titre2">Texte du titre 2.1 </Texte>
        <Texte Style="Titre2">Texte du titre 2.2 </Texte>
</Document>
-------------------------------------------------
Fichier XSL
---------------------------------------------------
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="Document">
                <xsl:element name="Document">
                        <!-- Il faut ammorcer la pompe avec chaque fils (les Titre1) -->
                        <xsl:apply-templates select="Texte[@Style='Titre1']" mode="DansNiveau">
                                <xsl:with-param name="Profondeur">0</xsl:with-param>
                        </xsl:apply-templates>
                </xsl:element>
        </xsl:template>
        <xsl:template match="Texte" mode="DansNiveau">
                <xsl:param name="Profondeur"/>
                <xsl:variable name="Niveau" select="substring-after(@Style,'Titre')"/>
                <xsl:choose>
                        <xsl:when test="$Niveau &gt; $Profondeur">
                                <xsl:element name="Niveau">
                                        <xsl:attribute name="Profondeur">
                                                <xsl:value-of select="$Niveau"/>
                                        </xsl:attribute>
                                        <xsl:apply-templates select="text()"/> <!-- Ici il faut faire le traitement pour les fils autre que Texte -->
                                        <xsl:apply-templates select="following::*[1]" mode="DansNiveau">
                                                <xsl:with-param name="Profondeur" select="$Profondeur + 1"/>
                                        </xsl:apply-templates>
                                </xsl:element>
                                <xsl:apply-templates select="following::*[1]" mode="HorsNiveau">
                                        <xsl:with-param name="Profondeur" select="$Profondeur + 1"/>
                                </xsl:apply-templates>
                        </xsl:when>
                        <xsl:otherwise>
                                <!-- On ne fait rien car se sera dans HorsNiveau -->
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
        <xsl:template match="Texte" mode="HorsNiveau">
                <xsl:param name="Profondeur"/>
                <xsl:variable name="Niveau" select="substring-after(@Style,'Titre')"/>
                <xsl:choose>
                        <xsl:when test="$Niveau = $Profondeur">
                                <xsl:element name="Niveau">
                                        <xsl:attribute name="Profondeur">
                                                <xsl:value-of select="$Niveau"/>
                                        </xsl:attribute>
                                        <xsl:apply-templates select="text()"/> <!-- Ici il faut faire le traitement pour les fils autre que Texte -->
                                        <xsl:apply-templates select="following::*[1]" mode="DansNiveau">
                                                <xsl:with-param name="Profondeur" select="$Profondeur"/>
                                        </xsl:apply-templates>
                                </xsl:element>
                                <xsl:apply-templates select="following::*[1]" mode="HorsNiveau">
                                        <xsl:with-param name="Profondeur" select="$Profondeur"/>
                                </xsl:apply-templates>
                        </xsl:when>
                        <xsl:when test="$Niveau &lt; $Profondeur">
                        <!-- Il n'y a rien à faire on remonte tout seul -->
                        </xsl:when>
                        <xsl:otherwise>
                                <!-- si > c'est déja fait dans DansNiveau -->
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
</xsl:stylesheet>
-----------------------------------------------------------------
Fichier résultat
----------------------------------------------------------
<?xml version="1.0" encoding="UTF-16"?>
<Document>
        <Niveau Profondeur="1">Texte du titre 1
                <Niveau Profondeur="2">Texte du titre 1.1 </Niveau>
                <Niveau Profondeur="2">Texte du titre 1.2
                        <Niveau Profondeur="3">Texte du titre 1.2.1 </Niveau></Niveau></Niveau>
        <Niveau Profondeur="1">Texte du titre 2
                <Niveau Profondeur="2">Texte du titre 2.1 </Niveau>
                <Niveau Profondeur="2">Texte du titre 2.2 </Niveau></Niveau>
</Document>
------------------------------------------------------------
On Mon, 11 Oct 2004 10:06:03 +0200, you wrote:

>Bonjour,
>Je suis face à un problème que je na sais par quel bout prendre, je veux hierarchisé un document qui ne l'est pas.
>Je pense que cela doit être un cas d'école, mais je n'ai rien trouvé alros qu'il me semble avoir déja lu quelque chose là dessus.
>Je m'explique :
>J'ai un document OpenOffice, donc les niveaux sont indiqués par des styles différents et ne sont pas imbriqués les uns dans les autres.
>Mon document de sortie lui est composé de balises imbriquées avec une notion de profondeur.
>Exemple :
><Texte Style="Titre1>Texte du titre 1 </Texte>
><Texte Style="Titre2>Texte du titre 1.1 </Texte>
><Texte Style="Titre2>Texte du titre 1.2 </Texte>
><Texte Style="Titre1>Texte du titre 2 </Texte>
><Texte Style="Titre2>Texte du titre 2.1 </Texte>
><Texte Style="Titre2>Texte du titre 2.2 </Texte>
>devrait donner :
><Niveau Profondeur=1>Texte du titre1
> <Niveau Profondeur=2>Texte du titre 1.1</Niveau>
> <Niveau Profondeur=2>Texte du titre 1.2</Niveau>
></Niveau>
><Niveau Profondeur=1>Texte du titre2
> <Niveau Profondeur=2>Texte du titre 2.1</Niveau>
> <Niveau Profondeur=2>Texte du titre 2.2</Niveau>
></Niveau>
>
>L'attribut Profondeur n'étant pas obligatoire, car inutile.
>
>Je ne vois absolument pas comment faire, mais il doit y avoir un truc!
>
>Marc

--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (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 xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Received on Mon Oct 11 18:01:26 2004

Archive générée par hypermail 2.1.8 le 26/10/2004 - 14:02 UTC

webmaster@xmlfr.org

 

xml tech

Discussions techniques au sujet de XML.

Cette liste est à votre disposition pour discuter en français de tout sujet technique lié à XML.



Devenez rédacteur <XML>fr et contribuez au développement du xml francophone !
Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot@online.fr  

Conception, réalisation et hébergement