XSLT (opérations avancées) : expressions régulières et fichiers texte

Lecture de fichier texte non XML

Introduction

Dans cette partie du cours, nous allons voir comment utiliser un fichier texte brut (non XML) avec le langage XSLT.

RappelLimitation du XSLT

Dans son principe de fonctionnement originel, XSLT est conçu pour prendre en entrée un fichier XML bien formé.

FondamentalLecture de fichier non XML

XSLT 2.0 introduit la possibilité de lire des fichiers texte qui ne sont pas nécessairement des fichiers XML bien formés.

La fonction :

CTRL+C pour copier, CTRL+V pour coller
1
unparsed-text($href as xs:string?, $encoding as xs:string) as xs:string?
unparsed-text($href as xs:string?, $encoding as xs:string) as xs:string?

permet en effet de lire une ressource externe et de renvoyer le résultat sous forme d'une chaîne de caractères.

L'argument $href correspond à l'URI de la ressource externe à lire.

Il est également possible de préciser un encodage spécifique via l'argument optionnel $encoding.

ExempleExemple de lecture d'un fichier texte non XML

Lecture du fichier txt.txt, en utilisant l'encoding iso-8859-1. La fonction unparsed-text(...) récupère le contenu du fichier et renvoie le résultat sous forme d'une chaîne de caractère à la commande xsl :value-of, qui affiche donc le contenu du fichier lu.

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
3
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
4
      exclude-result-prefixes="xs"
5
      version="2.0">
6
    
7
<xsl:output method="text"></xsl:output>
8
    
9
    <xsl:template match="/">
10
        <xsl:value-of select="unparsed-text('txt.txt', 'iso-8859-1')" disable-output-escaping="yes"/>
11
    </xsl:template>
12
    
13
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      exclude-result-prefixes="xs"
      version="2.0">
    
<xsl:output method="text"></xsl:output>
    
    <xsl:template match="/">
        <xsl:value-of select="unparsed-text('txt.txt', 'iso-8859-1')" disable-output-escaping="yes"/>
    </xsl:template>
    
</xsl:stylesheet>

Le paramètre disable-output-escaping, permet d'indiquer si les caractères spéciaux (comme '<' par exemple) sont échappés ou non.

ConseilComment lancer la transformation sans fichier XML source ?

Habituellement l'utilisation d'une transformation XSLT se fait via le document XML source (en utilisant la processing instruction « <?xml-stylesheet ... ?> »).

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
<?xml-stylesheet type="xsl" href="poeme.xsl"?>
3
4
<poeme titre="The Stone Troll" auteur="JRR Tolkien">
5
<strophe>
6
<vers>Troll sat alone on his seat of stone,</vers>
7
<vers>And munched and mumbled a bare old bone;</vers>
8
</strophe>
9
<strophe>
10
<vers>Up came Tom with his big boots on.</vers>
11
<vers>Said he to Troll: 'Pray, what is yon?</vers>
12
</strophe>
13
</poeme>
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="xsl" href="poeme.xsl"?>

<poeme titre="The Stone Troll" auteur="JRR Tolkien">
<strophe>
<vers>Troll sat alone on his seat of stone,</vers>
<vers>And munched and mumbled a bare old bone;</vers>
</strophe>
<strophe>
<vers>Up came Tom with his big boots on.</vers>
<vers>Said he to Troll: 'Pray, what is yon?</vers>
</strophe>
</poeme>

Pour pallier ce principe, si on ne souhaite pas faire appel à un fichier XML source, il faut utiliser le fichier XSLT (qui est du XML) comme entrée.

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Karim El Aktaa (Contributions : Stéphane Crozat et les étudiants de NF29) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)