[XSLT] Transformation contextuelle
Salut,
(Désolé pour le titre, mes connaissances d'XSLT sont des plus rudimentaires, et ce que je cherche à faire correspond vaguement à un global/pattern/substitute/autre-pattern/texte-de-remplacement/ (pour ceux qui connaissent sed/vim))
Mon but est de remplacer certains tableaux dans un document par autre chose, et de laisser tout le reste inchangé. En piquant, et retouchant, des morceaux de code à droite à gauche, j'ai trouvé de quoi copier sans altérer, et de quoi reconnaitre mes tableaux. Ou presque.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!-- convert.xsl -->
...
<!-- ==========================[ Rules tables ]=========================== -->
<xsl:template match="//informaltable/tgroup[@cols=2]/tbody">
foo
</xsl:template>
<!-- ==========================[ Identity ]=============================== -->
<xsl:template match="@*">
<xsl:copy />
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="* | text() | @*"/>
</xsl:copy>
</xsl:template> |
Seul problème, c'est que les
Code:
1 2 3 4 5 6 7 8 9
| <informaltable frame="all">
<tgroup cols="2">
<tbody>
<row>
bar
</row>
</tbody>
</tgroup>
</informaltable> |
sont transformés en
Code:
1 2 3 4 5
| <informaltable frame="all">
<tgroup cols="2">
foo
</tgroup>
</informaltable> |
alors que j'aurais voulu tout dégager depuis les <informaltable/> (seulement dans ce cas de "cols=2", et de une seule balise <row/> si possible)
Je soupçonne que mes problèmes viennent que <informaltable/> est matché par la règle générique.
Il y a-t-il un moyen simple de dire "l'ensemble de la table si elle est reconnue" ?