Thread View: fr.comp.text.xml
7 messages
7 total messages
Started by Une Bévue
Thu, 16 Feb 2012 17:41
xslt fabriquer un sous arbre pour pouvoir le parser à nouveau ?
Author: Une Bévue
Date: Thu, 16 Feb 2012 17:41
Date: Thu, 16 Feb 2012 17:41
96 lines
4777 bytes
4777 bytes
je fais une recherche sur un fichier xml correspondant � mon carnet
d'adresse.
le but est de repr�senter en html le contenu du carnet d'adresse en 3
colonnes avec des lignes de couleurs altern�es.
j'arrive tr�s bien � faire �a quand la s�lection des personnes se fait
sur un attribut "group" :
<xsl:if test="($mode = 'group')">
<div id="un">
<xsl:apply-templates select="people/person[@group=$group]"
mode="group_trois">
<xsl:sort select="name/text()" lang="{$lang}" data-type="text"
order="ascending" case-order="upper-first"/>
<xsl:with-param name="col" select="1"/>
<xsl:with-param name="col_parite" select="1"/>
</xsl:apply-templates>
</div>
<div id="zero">
<xsl:apply-templates select="people/person[@group=$group]"
mode="group_trois">
<xsl:sort select="name/text()" lang="{$lang}" data-type="text"
order="ascending" case-order="upper-first"/>
<xsl:with-param name="col" select="0"/>
<xsl:with-param name="col_parite" select="1"/>
</xsl:apply-templates>
</div>
<div id="deux">
<xsl:apply-templates select="people/person[@group=$group]"
mode="group_trois">
<xsl:sort select="name/text()" lang="{$lang}" data-type="text"
order="ascending" case-order="upper-first"/>
<xsl:with-param name="col" select="2"/>
<xsl:with-param name="col_parite" select="0"/>
</xsl:apply-templates>
</div>
</xsl:if>
</xsl:if>
mais quand je fais une recherche sur le nom de la personne ou sur une
partie d'un num�ro de t�l�phone, par exemple, je ne vois pas trop
comment faire.
enfin, j'ai une id�e, mais je ne sais pas comment l'impl�menter.
ce que je suppute :
si la personne correspond au crit�re de recherche, je l'ajoute dans un
arbre "r�sultat" et ensuite je traite cet arbre comme je le faisait avant.
bon je prend un exemple concret, soit une recherche sur un des num�ros
de t�l�phone, le xml est ainsi :
<person company="true" id="452D92BB-268C-11D8-B59C-000A95B14F2E"
image="/AB2Html/Images/company.png">
<name>Association Lacanienne Internationale</name>
<phones>
<phone type="work">01 42 60 14 43</phone>
<phone type="work fax">01 42 60 14 34</phone>
</phones>
<emails>
<email type="work">secretariat@freud-lacan.com</email>
</emails>
<note>Biblioth�que : ma je 13h30 - 17h30
de pref. Le mardi</note>
</person>
si je recherche toutes les personnes qui ont 42 dans leur num�ro de t�l,
je dois ajouter celle-ci et d'autres, donc je voudrait cr�er un
"sous-arbre" r�sultat du genre :
<result>
<person ...>
<name>Association Lacanienne Internationale</name>
<phones>
<phone type="work">01 42 60 14 43</phone>
<phone type="work fax">01 42 60 14 34</phone>
</phones>
<emails>
<email type="work">secretariat@freud-lacan.com</email>
</emails>
<note>Biblioth�que : ma je 13h30 - 17h30
de pref. Le mardi</note>
</person>
...
<person ...
...
</person>
</result>
et ensuite au lieu de faire comme pr�c�demment :
<xsl:apply-templates select="people/person[@group=$group]" ...
je ferai quelque chose du genre :
<xsl:apply-templates select="/result/people/person" ...
mais voil� je ne sais pas comment copier les r�sultats de ma recherche
dans un arbre...
Re: xslt fabriquer un sous arbre pour pouvoir le parser à nouveau ?
Author: Alain Ketterlin
Date: Thu, 16 Feb 2012 17:57
Date: Thu, 16 Feb 2012 17:57
30 lines
2467 bytes
2467 bytes
Une Bévue <unbewusstsein@fai.invalid> writes: [...] > si la personne correspond au critère de recherche, je l'ajoute dans un > arbre "résultat" et ensuite je traite cet arbre comme je le faisait > avant. [...] > mais voilà je ne sais pas comment copier les résultats de ma recherche > dans un arbre... Franchement, je n'ai pas tout lu, mais il me semble que tu as un problème avec les "result-tree-fragment". Quand ta transformation produit un fragment de XML, ce fragment n'est pas utilisable au même titre qu'un fragment du document initial. En gros, tu ne peux en faire qu'une chose, c'est <xsl:copy> (de tête, il faudrait vérifier dans le recommandation). Il y a une bonne raison (technique) à celà, qui est d'éviter au préprocesseur d'avoir à parser ce qu'il produit. Encore une fois, EXSLT a pensé à cela. La fonction exsl:node-set() (module common) permet de faire exactement ce qu'il te faut. Tu lui passes le fragment (que tu as probablement mis dans une variable) et il te renvoie un node-set. Tu peux ensuite appliquer tous les templates que tu veux. -- Alain.
Re: xslt fabriquer un sous arbre pour pouvoir le parser à nouveau ?
Author: Une Bévue
Date: Thu, 16 Feb 2012 19:09
Date: Thu, 16 Feb 2012 19:09
27 lines
2450 bytes
2450 bytes
Alain Ketterlin <alain@dpt-info.u-strasbg.fr> wrote: > Encore une fois, EXSLT a pens� � cela. La fonction exsl:node-set() > (module common) permet de faire exactement ce qu'il te faut. Tu lui > passes le fragment (que tu as probablement mis dans une variable) et il > te renvoie un node-set. Tu peux ensuite appliquer tous les templates que > tu veux. bon, j'essaie �a, avec copy-of aussi il peut y avoir une solution. dans l'exemple fourni : <http://www.exslt.org/exsl/functions/node-set/exsl.node-set.html> le template agit sur le xml source pas sur la variable. je peux changer �a ? en fait je ne pige pas ce que vient faire : <xsl:variable name="tree"> <a><b><c><d/></c></b></a> </xsl:variable> -- � Les conneries c'est comme les imp�ts, on finit toujours par les payer. � (Michel Audiard)
Re: xslt fabriquer un sous arbre pour pouvoir le parser à nouveau ?
Author: Alain Ketterlin
Date: Fri, 17 Feb 2012 08:18
Date: Fri, 17 Feb 2012 08:18
25 lines
2135 bytes
2135 bytes
unbewusst.sein@fai.invalid (Une Bévue) writes: > dans l'exemple fourni : > <http://www.exslt.org/exsl/functions/node-set/exsl.node-set.html> > > le template agit sur le xml source pas sur la variable. Dans le deuxième exemple, node-set s'applique à $tree, qui contient un result-tree-fragment. > en fait je ne pige pas ce que vient faire : > <xsl:variable name="tree"> > <a><b><c><d/></c></b></a> > </xsl:variable> Cela construit un r-t-f dans la variable tree, que normalement XSLT ne te permet pas de traiter. node-set($tree) transforme ce r-t-f en... node-set "normal". Tu pourrais faire : <xsl:apply-templates select="node-set($tree)"/> ou toute variante. -- Alain.
Re: xslt fabriquer un sous arbre pour pouvoir le parser à nouveau ?
Author: Une Bévue
Date: Fri, 17 Feb 2012 15:52
Date: Fri, 17 Feb 2012 15:52
9 lines
1760 bytes
1760 bytes
Le 17/02/2012 09:18, Alain Ketterlin a écrit : > Cela construit un r-t-f dans la variable tree, que normalement XSLT ne > te permet pas de traiter. node-set($tree) transforme ce r-t-f en... > node-set "normal". Tu pourrais faire : > > <xsl:apply-templates select="node-set($tree)"/> j'ai essayé count(node-set($tree)) ça m'a retourné 1... ?
Re: xslt fabriquer un sous arbre pour pouvoir le parser à nouveau ?
Author: Alain Ketterlin
Date: Fri, 17 Feb 2012 16:04
Date: Fri, 17 Feb 2012 16:04
19 lines
2089 bytes
2089 bytes
Une Bévue <unbewusstsein@fai.invalid> writes: > Le 17/02/2012 09:18, Alain Ketterlin a écrit : >> Cela construit un r-t-f dans la variable tree, que normalement XSLT ne >> te permet pas de traiter. node-set($tree) transforme ce r-t-f en... >> node-set "normal". > > j'ai essayé count(node-set($tree)) ça m'a retourné 1... > ? Il y a quoi dans $tree. Il faut qu'on cherche dans les messages précédents pour savoir ? http://www.w3.org/TR/xslt#section-Result-Tree-Fragments explique la nature des result-tree-fragment, en particulier le noeud racine qui chapeaute les noeuds du contenu. -- Alain.
Re: xslt fabriquer un sous arbre pour pouvoir le parser à nouveau ?
Author: Une Bévue
Date: Sat, 18 Feb 2012 08:59
Date: Sat, 18 Feb 2012 08:59
16 lines
1964 bytes
1964 bytes
Le 17/02/2012 17:04, Alain Ketterlin a écrit : > Il y a quoi dans $tree. Il faut qu'on cherche dans les messages > précédents pour savoir ? > > http://www.w3.org/TR/xslt#section-Result-Tree-Fragments > > explique la nature des result-tree-fragment, en particulier le noeud > racine qui chapeaute les noeuds du contenu. de mémoire : <xsl:variable name="tree"> <a><b><c><d><e/></d></c></b></a> </xsl:variable> j'ai essayé avec saxon.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads