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.

From: Cyril Jandia (cjandia@logfi.fr)
Date: 30/10/2002 - 09:31


Bonjour Frédéric,

> -----Message d'origine-----
> De : Frederic.Evesque@equipement.gouv.fr
> Envoyé : mardi 29 octobre 2002 18:02
> À : xml-tech@xmlfr.org
> Objet : [xml-tech] Reconstitution d'arbre
>
> Bonjour,
>
> Je suis confronté à un problème de reconstitution d'arbre, et je me
> demandais s'il était possible de le faire avec XML et une transformation
> XSLT :
>
> Voilà mon fichier source avec une syntaxe XML, un élément "personne" possède
> 0 ou 1 père, et 0 à plusieurs enfants.
> [...]J'aimerais générer le fichier suivant, pour tous les éléments ne
possédant
> pas de père :

Voici une solution possible :

(NB : l'existence de vos deux éléments "pere" et "enfant" créent une redondance
du jeu d'informations quant à l'établissement de la relation père-enfant dans
votre document XML source;
ma solution a donc fait le choix (arbitraire) de s'appuyer seulement sur une
définition de cette relation via l'élément "pere" - c'est pourquoi la
transformation test.xsl ci-dessous ne tient pas compte de ces éléments "enfants"
cités dans un "pere" - je vous laisse en exercice cette autre possibilité ;=)

Source :

-- data.xml
<?xml version="1.0" encoding="iso-8859-1" ?>

<personnes>

<personne nom="Papy">
        <pere></pere>
        <enfant>Papa</enfant>
</personne>

<personne nom="Papa">
        <pere>Papy</pere>
        <enfant>Enfant1</enfant>
        <enfant>Enfant2</enfant>
</personne>

<personne nom="Enfant1">
        <pere>Papa</pere>
</personne>

<personne nom="Enfant2">
        <pere>Papa</pere>
</personne>

</personnes>

Transfo. (avec qq commentaires pour aider, mais qui ne remplaceront pas le livre
cité ci-dessous -- un "must" à mon avis) :

-- test.xsl
<?xml version="1.0" encoding="iso-8859-1" ?>

<xsl:transform
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

<xsl:output method="xml" version="1.0" encoding="iso-8859-1" />

<xsl:template match="personnes">
<!--
  Pour démarrer le processus, on commence par ne s'intéresser qu'à
  la seule "personne" n'ayant pas de "pere" (notre "Adam" si l'on veut).
-->
<xsl:apply-templates select="personne[string(pere)='']" />
</xsl:template>

<xsl:template match="personne">
<xsl:copy><xsl:for-each select="@*">
<!--
  Que la personne ait un "pere" ou nom,
  on recopie ses attributs (nom, etc).
-->
  <xsl:copy-of select="." />
  </xsl:for-each>
<!--
  Puis, on lance la descente récursive sur les personne ayant ce "pere";
  note : la terminaison de cette récursion est assurée par deux conditions
  sur la source :
  1) il n'y a pas de cycle enfant-père-enfant-...
  2) le document XML source est... fini (toujours vraie normalement! ;=)
-->
  <xsl:apply-templates select="//personne[string(pere)=current()/@nom]" />
</xsl:copy>
</xsl:template>

</xsl:transform>

On obtient alors le résultat (attendu) :

-- result.xml
<?xml version="1.0" encoding="iso-8859-1"?>

<personne nom="Papy">
  <personne nom="Papa">
    <personne nom="Enfant1" />
    <personne nom="Enfant2" />
  </personne>
</personne>

> [...]N'étant qu'un novice en XSL, si quelqu'un peut me fournir quelques idées.

Des idées de lecture par exemple?
(En voici une en français :
  http://xmlfr.org/listes/xml-tech/2002/07/0000.html
;=)

> Merci d'avance,
>
> Frederic

Cordialement,
--CJ

--
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)



Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 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