Il me dit : Aglaé ! Mon nom est Ernestine Monsieur !Nous savons (implicitement) que c'est Ernestine qui parle
Il me dit : Aglaé, ya pas d'dout' faut nous marier !
<dialogue>
<elle_dit> Il me dit :
<il_a_dit>Aglaé ! </il_a_dit>
<elle_a_dit> Mon nom est Ernestine Monsieur ! </elle_a_dit>
</elle_dit>
<elle_dit> Il me dit :
<il_a_dit> Aglaé, ya pas d'dout' faut nous marier ! </il_a_dit>
</elle_dit>
</dialogue>
<html>
<head> <title> Chanson d'Ernestine </title> <head>
<body>
<p>Il me dit : <i> Aglaé ! </i> <br>
<b> Mon nom est Ernestine Monsieur ! </b>
</p>
<p> Il me dit : <i> Aglaé, ya pas d'dout'
faut nous marier ! </i>
</p>
</body>
</html>
<?xml version="1.0"?>L'arbre vu par le navigateur :
<dialogue>
<propos locuteur="Elle">
<contenu>
<propos locuteur="Lui">
<contenu>
<texte>Aglae' !</texte>
</contenu>
</propos>
<propos locuteur="Elle">
<contenu>
<texte> Mon nom est Ernestine Monsieur !</texte>
</contenu>
</propos>
</contenu>
</propos>
<propos locuteur="Elle">
<contenu>
<propos locuteur="Lui">
<contenu>
<texte>Aglae', ya pas d'dout' faut nous marier !</texte>
</contenu>
</propos>
</contenu>
</propos>
</dialogue>
<?xml version="1.0"?>
<!ELEMENT dialogue (propos*)>
<!ELEMENT propos (contenu)>
<!ATTLIST propos locuteur (Lui|Elle) #REQUIRED>
<!ELEMENT contenu (texte|propos)>
<!ELEMENT texte (#PCDATA)>
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
<xsl:output method="html" encoding="utf-8" />
<!--=========== à la racine, on engendre un cadre HTML minimal =========== -->
<xsl:template match="/">
<html><head><title>Chanson d'Ernestine</title></head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<!-- chaque élément "propos" sera mis dans un paragraphe HTML (balise <p>) -->
<xsl:template match="dialogue/propos">
<xsl:element name="p">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<!--===== Le texte proféré par "Elle" sera mis en gras (balise <b>) =====-->
<xsl:template match="propos[@locuteur='Elle']/contenu/texte">
<xsl:element name="b">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<!--==== Le texte proféré par "Lui" sera mis en italiques (balise <i>) ====-->
<xsl:template match="propos[@locuteur='Lui']/contenu/texte">
<xsl:element name="i">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<!-- Si le contenu d'un propos tenu par "Elle" est lui-même un (sous-)propos
alors ce sous-propos sera précédé par "Il me dit" ou par "Je lui dis"
selon l'identité du locuteur de ce sous-propos.
En outre, s'il ne s'agit pas du premier sous-propos,
il sera précédé d'un saut de ligne ==================================-->
<xsl:template match="propos[@locuteur='Elle']/contenu/propos">
<xsl:if test="position()>1">
<br />
</xsl:if>
<xsl:choose>
<xsl:when test="@locuteur='Lui'">
Il me dit :
<xsl:apply-templates/>
</xsl:when>
<xsl:when test="@locuteur='Elle'">
Je lui dis :
<xsl:apply-templates/>
</xsl:when>
</xsl:choose>
</xsl:template>
<!--=== Symétriquement pour les sous-propos d'un propos tenu par "Lui" ===-->
<xsl:template match="propos[@locuteur='Lui']/contenu/propos">
<xsl:if test="position()>1">
<br />
</xsl:if>
<xsl:choose>
<xsl:when test="@locuteur='Lui'">
Je lui dis :
<xsl:apply-templates/>
</xsl:when>
<xsl:when test="@locuteur='Elle'">
Elle me dit :
<xsl:apply-templates/>
</xsl:when>
</xsl:choose>
</xsl:template>
<!--========================= Et voila tout ! ==========================-->
</xsl:stylesheet>