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 < this.options.length; a++)
>eval('document.all.'+this.options[a].value+'.style.display="none"');
>
>eval('document.all.'+this.value+'.style.display="block"');"><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="block"');</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