Bonjour,
Le vendredi 03 février 2006 à 09:50 +0100, Aguero, Dimitri a écrit :
> Bonjour,
> Toujours en apprentissage quatre ans après avoir rejoint cette liste,
:-)
> je me demandais s'il était possible de parser un fichier plat de
> cette structure avec XSLT:
>
> **********************************************************************
>
> Titre 1
>
> Item1 Valeur 1 valeur 2 valeur 3.... valeur N
>
> Item2 valeur101 valeur 102 valeur 103 valeur 10n
>
> Titre 2
>
> Item1 Valeur 1 valeur 2 valeur 3.... valeur N
>
> Item2 valeur101 valeur 102 valeur 103 valeur 10n
>
> (....)
En XSLT 1.0, cela ne sera possible que si cette séquence est inclue dans
un document XML, par exemple :
<?xml version="1.0" encoding="UTF-8"?>
<racine><![CDATA[
Titre 1
Item1 Valeur 1 valeur 2 valeur 3.... valeur N
Item2 valeur101 valeur 102 valeur 103 valeur 10n
Titre 2
Item1 Valeur 1 valeur 2 valeur 3.... valeur N
Item2 valeur101 valeur 102 valeur 103 valeur 10n
]]></racine>
Si ce n'est pas le cas, il faudrait que vous rajoutiez les lignes
correspondantes avant et après le text pour en faire un document XML.
L'utilisation d'une section CDATA permet alors d'éviter la plupart des
problèmes liés à des caractères spéciaux.
Il faut toutefois noter que :
* un "]]" dans le texte poserait problème.
* l'encodage doit correspondre à celui qui est déclaré
* les caractères de contrôles sont, quoique vous fassiez, interdit
en XML.
> **********************************************************************
>
> en
>
> **********************************************************************
>
> <Titre1>
>
> <item1>Valeur 1 valeur 2 valeur 3.... valeur N </item1>
>
> <item2>valeur101 valeur 102 valeur 103 valeur 10n </item1>
>
> </Titre1>
>
> **********************************************************************
Vous éliminez ce qui est après "Titre 2"?
Pour faire ce type de transformation en XSLT 1.0, il faut combiner les
templates nommés et les rares fonctions XPath portant sur des chaînes de
caractères, ce qui donne des choses du style :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/racine">
<xsl:param name="texte" select="substring-after(., '
')"/>
<xsl:element name="{translate(substring-before($texte, '
'), ' ', '')}">
<xsl:call-template name="items">
<xsl:with-param name="texte" select="substring-after($texte, '
')"/>
</xsl:call-template>
</xsl:element>
</xsl:template>
<xsl:template name="items">
<xsl:param name="texte"/>
<xsl:variable name="ligne" select="substring-before($texte, '
')"/>
<xsl:if test="contains($ligne, ' ')">
<xsl:element name="{substring-before($ligne, ' ')}">
<xsl:value-of select="substring-after($ligne, ' ')"/>
</xsl:element>
<xsl:call-template name="items">
<xsl:with-param name="texte" select="substring-after($texte, '
')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Je ne suis pas un grand partisan de XSLT 2.0, mais il faut reconnaître
que c'est un domaine où les nouvelles fonctions introduites par la
spécification simplifient énormément les choses.
Cordialement,
Eric van der Vlist
--
GPG-PGP: 2A528005
Don't you think all these XML schema languages should work together?
http://dsdl.org
------------------------------------------------------------------------
Eric van der Vlist http://xmlfr.org http://dyomedea.com
(ISO) RELAX NG ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------
-- Attached file included as plaintext by Ecartis --
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD8DBQBD4yDNDvn+ZCpSgAURAuIUAKCQtBAvsVGoueR1SpvrDts99tHQ6QCfdtoX
/vEF5YWQUrhfrtDC+nINgfQ=
=sRQH
-----END PGP SIGNATURE-----
--
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 Fri Feb 3 10:22:26 2006