I.Решение XSLT 1.0 :
Просто добавьте этот атрибут в xsl:output
:
encoding="us-ascii"
Это приводит к тому, что любой не-ascii символ будет отображаться с его символомcode.
Однако вы все равно можете получить разные выходные данные, такие как:
<field value="Lei Complementar No. 116/2003, Art. 6, § 2º, I."/>
и
<field value="Lei Complementar No. 116/2003, Art. 6, § 2º, I." />
И, конечно, все эти три просторазличные представления одной и той же строки символов (Unicode).
II.Решение XSLT 2.0 :
Использует инструкцию <xsl:character-map>
и всегда должно выдавать один и тот же вывод:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes"
indent="yes" use-character-maps="chmEscapes"/>
<xsl:character-map name="chmEscapes">
<xsl:output-character character="§"
string="&#167"/>
<xsl:output-character character="º"
string="&#186"/>
</xsl:character-map>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
, когда это преобразование применяется к предоставленному документу XML:
<field value="Lei Complementar No. 116/2003, Art. 6, § 2º, I."/>
желаемый, правильный результат получается :
<field value="Lei Complementar No. 116/2003, Art. 6, § 2º, I."/>