Bonjour,

Je dois convertir un fichier XML qui contient des données pouvant contenir les caractères interdits en XML (", <, > et &). Le problème, c'est que cela ne fonctionne que pour 3 des 4 caractères cités, malgré des essais avec Xalan Java 2.7.0 et MX XSLT 4.0. Voici des fichiers exemples :

Fichier d'entrée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<rowSet>
    <row>
        <field name="ITEM_1" value="Moi &amp; Toi" />
        <field name="ITEM_2" value="Moi &lt; Toi" />
        <field name="ITEM_3" value="Moi &gt; Toi" />
        <field name="ITEM_4" value="Moi &quot;sur&quot; Toi" />
    </row>
</rowSet>
ATTENTION : Dans le fichier en réalité, la dernière balise est en réalité :
<field name="ITEM_4" value="Moi &quot;sur&quot; Toi" />

Fichier XSLT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" encoding="UTF-8" />
 
    <xsl:template match="/rowSet">
        <xsl:text disable-output-escaping="yes">&lt;root&gt;</xsl:text>
            <xsl:apply-templates/>
        <xsl:text disable-output-escaping="yes">&lt;/root&gt;</xsl:text>
    </xsl:template>
 
    <xsl:template match="/rowSet/row">
        <xsl:for-each select="./field">
            <xsl:text disable-output-escaping="yes">&lt;text&gt;</xsl:text>
            <xsl:value-of select="@value"/>
            <xsl:text disable-output-escaping="yes">&lt;/text&gt;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>
Fichier de sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <text>Moi &amp; Toi</text>
    <text>Moi &lt; Toi</text>
    <text>Moi &gt; Toi</text>
    <text>Moi "sur" Toi</text>
</root>
Là par contre, c'est bien fidèle au fichier obtenu en sortie.

Quelqu'un aurait une idée ?
Merci d'avance