Ce script XSLT
(table_n_columns2XML.xslt) permet de récupérer le
contenu d'un tableau HTML en produisant des balises HTML correspondant
aux titres de colonnes (première ligne du tableau, entre
les balises <TH> et </TH>). L'usage est donné
par la première ligne de commentaire.
<?xml version="1.0"
encoding="iso-8859-1" ?>
<!--
xt tableau.htm table_n_columns2XML.xslt > donnees.xml
xsl:exclude-result-prefixes="#default"
xmlns="http://www.w3.org/Profiles/xhtml1-transitional"
xmlns="http://www.w3.org/1999/xhtml"
indent = "yes"
-->
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
version="1.0"
>
<xsl:output
method = "xml" encoding="iso-8859-1" />
<xsl:strip-space elements = "tr th font tbody
table body html" />
<xsl:variable
name='header-row'>
<xsl:copy-of select="(/*/*/*['table'=local-name()]//*['tr'=local-name()])
[1]"/>
</xsl:variable>
<xsl:template
name="replace-spaces" >
<xsl:param name="mystring"></xsl:param>
<xsl:variable name ="match"
>  /()"éèêàûôîï<>&°:</xsl:variable>
<xsl:variable name ="replace">__----eeeauoii---0-</xsl:variable>
<xsl:value-of select='translate(normalize-space($mystring),
$match, $replace)'/>
</xsl:template>
<xsl:template
match="*[ local-name() ='td']">
<xsl:variable name="current_position">
<xsl:value-of select="position()"/>
</xsl:variable>
<xsl:variable name="colpos">
<xsl:value-of select="count(
(../*[ local-name() ='td']) [ position() <= $current_position
])"/>
</xsl:variable>
<!--
DEBUG $current_position <xsl:value-of
select="$current_position"/>
DEBUG $colpos <xsl:value-of select="$colpos"/>
-->
<xsl:variable name="colname">
<xsl:value-of select="$header-row/*[
local-name() ='tr']/*[ local-name() ='td' or local-name() ='th']
[position() = $colpos ]"/>
</xsl:variable>
<xsl:variable name="colname2"
>
<xsl:call-template name="replace-spaces">
<xsl:with-param
name="mystring">
<xsl:value-of
select="$colname"/>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:if
test="string-length($colname2)">
<!--
<xsl:message> $colname2="<xsl:value-of
select="$colname2"/>" </xsl:message>
-->
<xsl:element name="{$colname2}">
<xsl:value-of
select="normalize-space(.)"/>
</xsl:element>
</xsl:if>
</xsl:template>
<xsl:template
match="/">
<!--
DEBUG $header-row
DEBUG <xsl:copy-of select="$header-row"
/>
DEBUG FIN $header-row
-->
<xsl:text>
</xsl:text>
<table>
<xsl:text>
</xsl:text>
<xsl:if test="$header-row">
<xsl:comment>XML tags
created from HTML headers by table_n_columns2XML.xslt
</xsl:comment>
<thead>
<xsl:for-each select="$header-row"
>
<xsl:copy>
<xsl:for-each
select="//*[ local-name() ='th'] | //TH | //td | //TD"
>
<th>
<xsl:apply-templates /> </th>
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
</thead>
<xsl:for-each select="(//*[
local-name() ='tr' ] | //TR)[position()>1][(*[ local-name()
='td']|TD) and not(*[ local-name() ='th'])]" >
<xsl:text>
</xsl:text>
<!--
DEBUG count(*)=<xsl:copy-of
select="count(*)" />
DEBUG count(node())=<xsl:copy-of
select="count(node())" />
-->
<tr> <xsl:apply-templates
select='*' /> </tr>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:if><!-- test="$header-row"
-->
</table>
</xsl:template>
</xsl:stylesheet>
|