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: XSL: parcours de XML avec une sous-arborescence variable

[xml-tech] Re: XSL: parcours de XML avec une sous-arborescence variable

Auteur: <nathalie.burlot@equant.com>
Date: 01/06/2005 - 08:01
X-Mailer: Lotus Notes Release 5.0.7 March 21, 2001

Merci, beaucoup.

Je vais essayer cette nouvelle voie ;-)

Nathalie BURLOT
Equant - Portail Métiers DO
Phone: 02.23.2 8.35.83
http://www.equant.com

Ce message et les documents qui peuvent y être joints sont confidentiels et
destinés uniquement à l'usage de leur(s) destinataire(s). Si vous avez
reçu ce message par erreur, vous n'êtes pas autorisé à lire, utiliser,
copier, divulguer ou faire suivre à quiconque les informations qu'il
contient. En conséquence, nous vous prions de bien vouloir immédiatement
détruire ce message, ainsi que les documents qui y sont joints.

                                                                                                           
            Stéphane Bonhomme
            <s.bonhomme@wanadoo.fr>
            Sent by: To: xml-tech@xmlfr.org
            xml-tech-bounce@xmlfr.org cc:
            30/05/2005 14:49 bcc:
            Please respond to xml-tech Subject: [xml-tech] Re: XSL: parcours de XML avec une
                                                  sous-arborescence variable
                                                                                                           
                                                                                                           

Voila (brievement) l'idée que je suivrais avec l'utilisation de
apply-templates, et de l'attribut mode pour différencier le premier du
second parcours, le calcul de la profondeur d'une activité est effectuée en
comptant le nombre d'ancêtres dans l'arbre xml.

Je vous laisse bien sur le soin d'adapter et peaufiner cet exemple en
fonction de votre cas réel

Cordialement,

Stéphane.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet 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="/">
    <!-- premier parcours (axe0) -->
    <xsl:apply-templates select="/actTech/axe0" mode="parcours1">
       <xsl:sort.../>
    </xsl:apply-templates>
    <!-- second parcours (axe1) -->
    <xsl:apply-templates select="/actTech/axe1" mode="parcours2">
       <xsl:sort.../>
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="axe0" mode="parcours1">
    <!--traitement des axe0 lors du premier parcours -->
  </xsl:template>

  <xsl:template match="axe0" mode="parcours2">
    <!--traitement des axe0 lors du second parcours -->
    <!-- appel des templates sur les sous axes -->
    <xsl:apply-templates mode="parcours2">
      <xsl:sort.../>
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="axe1" mode="parcours2">
    <xsl:variable name="profondeur">
      <xsl:value-of select="count(ancestor-or-self::*:*)"/>
    </xsl:variable>
    <!--traitement des axe1 lors du second parcours -->
    <!-- appel des templates sur les sous axes -->
    <xsl:apply-templates mode="parcours2">
      <xsl:sort.../>
    </xsl:apply-templates>
  </xsl:template>

</xsl:stylesheet>

nathalie.burlot@equant.com wrote:

>Stéphane,
>
>il est vrai que je suis allée un peu vite sur la simplification de mon
>code.
>
>Voila a quoi ressemble mon template schématisé:
><xsl:template name="MyTemplate">
> <xsl:param name="NiveauXmlParam"/>
> .... Traitements .....
> <xsl:for-each select="/Niv1/Niv2">
> <xsl:sort select="libelle[@lng='fr']"/>
> .... Traitements ....
> <xsl:for-each select="$NiveauXmlParam">
> <xsl:sort select="libelle[@lng='fr']"/>
> .... Traitements ....
> </xsl:for-each>
> </xsl:for-each>
></xsl:template>
>
>Pour expliquer assez simplement ma problèmatique :-):
>J'ai un fichier XML généré par une classe java selon des critères de
>calculs suivant:
>Objet: classification ou taxonomy (liste d'activités métier)
>Objet: resssource (définition de lien http etc ....)
>Objet répartition: liste des axes de classification d'un lien
>Le fichier XML généré liste les liens dans une classification partiel
selon
>des règles.
>Mon problème c'est que ma classification peut avoir une profondeur
>variable(par conséquent le XML aussi) et que pour l'instant, le traitement
>de render ne fait pas de nettoyage, à savoir rendre uniquement les niveaux
>de classification utiles.
>Par contre, les traitements xsl sont les mêmes mais je dois juste indiquer
>quels niveaux lire. Ces traitements xsl transforment en html les données
>pour les afficher sous forme d'une matrice (tableau).
>
>ex de fichier XML:
><actTech>
> <provider id="InterventionProductionOffres"/>
> <!-- Définition des types de liens -->
> <docTypes>
> <docType id="DOC" rank="2">
> <libelle lng="fr">Documentation</libelle>
> <docType id="DOC_PLANNING" rank="0"><libelle
>lng="fr">Planning</libelle></docType>
> ...
> </docType>
> <docType id="OUTIL" rank="1"><libelle
>lng="fr">Outil</libelle></docType>
> </docTypes>
> <!-- Imbrication des activités en fonctions des offres ( axes de
>classification) -->
> <axe0 id="offres" rank="1">
> <libelle lng="fr">offres</libelle>
> <axe0 id="offres_1" rank="1">
> <libelle lng="fr">PP</libelle>
> <lien id="id_u_20050523030409" Administrable="VRAI"
>rNiveauChoisie="xx" url="tbd" auth="NONE" argsLanceur="null" new="1"
>rankLien="1010" src="NATIONAL" typeLien="DOC" cPPationDate="20050523"
>err="TO_ZZ_DEFINED" majDate="20050523" majAuthor="xx">
> <libelle lng="fr">lien offre</libelle>
> <commentaiPP lng="fr"/>
> <libelle_err lng="fr">Lien non disponible.</libelle_err>
> </lien>
> <axe1 id="activite_1" rank="10">
> <libelle lng="fr">Production</libelle>
> <lien ...><libelle lng="fr">lien activite offre
PP</libelle></lien>
> <lien ...><libelle lng="fr">lien activite offres</libelle></lien>
> <axe1 id="activite_1_2" rank="12">
> <libelle lng="fr">Qualifier la demande d'intervention</libelle>
> <lien ...><libelle lng="fr">lien activite offre
>PP</libelle></lien>
> <lien ...><libelle lng="fr">lien activite
offres</libelle></lien>
> </axe1>
> <axe1 id="activite_1_1" rank="11">
> <libelle lng="fr">Prendre en compte la demande
>d'intervention</libelle>
> <lien ...><libelle lng="fr">lien activite offre
>PP</libelle></lien>
> <lien ...><libelle lng="fr">lien activite
offres</libelle></lien>
> </axe1>
> </axe1>
> </axe0>
> <axe1 id="activite_1" rank="10">
> <libelle lng="fr">Production</libelle>
> <axe1 id="activite_1_1" rank="11">
> <libelle lng="fr">Prendre en compte la demande
>d'intervention</libelle>
> </axe1>
> <axe1 id="activite_1_2" rank="12">
> <libelle lng="fr">Qualifier la demande d'intervention</libelle>
> </axe1>
> </axe1>
> <axe0 id="offres_2" rank="2">
> <libelle lng="fr">ZZ</libelle>
> <lien ...><libelle lng="fr">lien offre</libelle></lien>
> <axe1 id="activite_1" rank="10">
> <libelle lng="fr">Production</libelle>
> <lien ...>lien activité offres ZZ</libelle></lien>
> <lien ...><libelle lng="fr">lien activite offres</libelle></lien>
> <axe1 id="activite_1_1" rank="11">
> <libelle lng="fr">Prendre en compte la demande
>d'intervention</libelle>
> <lien ...>lien activité offres ZZ</libelle></lien>
> <lien ...><libelle lng="fr">lien activite
offres</libelle></lien>
> </axe1>
> <axe1 id="activite_1_2" rank="12">
> <libelle lng="fr">Qualifier la demande d'intervention</libelle>
> <lien ...>lien activité offres ZZ</libelle></lien>
> <lien ...><libelle lng="fr">lien activite
offres</libelle></lien>
> </axe1>
> </axe1>
> </axe0>
> </axe0>
></actTech>
>
>Le premier parcours se fait sur les axes0, dont je sais le niveau
constant.
>Par contre le deuxième parcours de boucle dépend de la définition de
>l'activité (sur 1 ou plusieurs niveaux)
>
>Donc voici le traitement que je souhaiterais:
>Le template principal dans lequel je définis le niveau axe1 à traiter ( Je
>duplique ce fichier en fonction des configurations d'activités)
>
><?xml version="1.0" encoding="ISO-8859-1"?>
><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>version="1.0">
> <xsl:import href="template_Matrice.xsl"/>
> <xsl:output method="xml" version="1.0" encoding="iso-8859-1" />
>
> <xsl:template match="/">
> <xsl:call-template name="MatriceActOff">
> <!-- à définir dans une variable ou autre mais pas un
>select ! -->
> <xsl:with-param
>name="niveauActiviteXml">axe1/axe1</xsl:param>
> </xsl:call-template>
> </xsl:template>
></xsl:stylesheet>
>
>(et le template de traitement qui reste constant)
><xsl:template name="MatriceActOff">
> <xsl:param name="niveauActiviteXml"/-->
> <div align="center">
> <select onchange="for (var a=0; a &lt; this.options.length; a++)
>eval('document.all.'+this.options[a].value+'.style.display=&quot;none&quot;');

>
>eval('document.all.'+this.value+'.style.display=&quot;block&quot;');"><xsl:attribute

> name="name">portlet<xsl:value-of
>select="/actTech/provider/@id"/></xsl:attribute>
> <xsl:for-each select="/actTech/axe0/axe0">
> <xsl:sort select="@rank" data-type="number"/><xsl:sort
>select="libelle[@lng='fr']"/>
> <option><xsl:attribute name="value"><xsl:value-of
>select="@id"/><xsl:value-of
>select="generate-id()"/></xsl:attribute><xsl:value-of
>select="libelle[@lng='fr']"/></option>
> </xsl:for-each>
> </select>
>
> <xsl:for-each select="/actTech/axe0/axe0">
> <xsl:sort select="@rank" data-type="number"/><xsl:sort
>select="libelle[@lng='fr']"/>
> <div style="display=none">
> <xsl:variable name="offre" select="@id"/>
> <xsl:attribute name="id"><xsl:value-of
>select="$offre"/><xsl:value-of select="generate-id()"/></xsl:attribute>
> <table class="matrice">
> <tr>
> <th></th>
> <xsl:for-each
>select="/actTech/docTypes"><xsl:call-template
>name="docTypes"/></xsl:for-each>
> </tr>
> * <xsl:for-each select="$niveauActiviteXml[lien]">
> <xsl:sort select="@rank"
>data-type="number"/><xsl:sort select="libelle[@lng='fr']"/>
> <xsl:variable name="activite"><xsl:value-of
>select="@id"/></xsl:variable>
> <tr>
> <th><xsl:value-of
>select="libelle[@lng='fr']"/></th>
> <xsl:call-template name="afficheLigneMatrice">
>* <xsl:with-param name="niveauXmlLigne"
>select="/actTech/axe0/axe0[@id=$offre]/$niveauActiviteXml"/>
> <xsl:with-param name="currentAxe"
>select="$activite"/>
> <xsl:with-param
>name="imbrique">false</xsl:with-param>
> </xsl:call-template>
> </tr>
> </xsl:for-each>
> </table>
> </div>
> </xsl:for-each>
> <script>eval(portlet<xsl:value-of
>select="/actTech/provider/@id"/>.value+'.style.display=&quot;block&quot;');</script>

> </div>
></xsl:template>
>
>J'avoue qu'il est possible que je me sois mal orientée sur la solution
>depuis le début.
>Donc si tu as un avis sur l'art et la manière de faire, je te remercie
>d'avance.
>
>cdlt,
>
>Nathalie BURLOT
>
>
>
>
>--
>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)
>
>
>
>

--
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)
--
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 Wed Jun 1 10:01:43 2005

Archive générée par hypermail 2.1.8 le 30/06/2005 - 21:52 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