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">
secre...@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">
secre...@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...