Problemem mit XSLT und Entities
fredy
- xsl
Hi!
Wenn ich ein XML-Dokument mit Entities mit einem XSLT-Dokument
parse, so werde die Entities durch die entsprechenden Sonderzeichen
ersetzt, was jedoch nicht Sinnvoll ist da die Entities im durch
das parsen entstehenden HTML-Code erhalten bleiben sollen.
MEIN XML-DOKUMENT:
<?xml version=""1.0"" encoding=""UTF-16""?>
<data>öäü</data> <!-- ö steht für ö -->
MEIN XSL-DOKUMENT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<xsl:value-of select="/data/."/>
</xsl:template>
</xsl:stylesheet>
Das Ergebnis:
öäü
Wenn ich ein Entity unter CDATA setze, dann
wird das & im Entity durch ein & ersetzt.
Gibt es eine Lösung für dieses Problem oder hat
nur mein XML-Parser (MSXML) einen Bug ?
Danke und liebe Grüße
fredy
Hi!
Gibt es eine Lösung für dieses Problem oder hat
nur mein XML-Parser (MSXML) einen Bug ?
Nein, er hat keinen Bug (auch wenn es MS ist :),
ja, es gibt eine Lösung:
ö
VG Simon
Hallo,
Gibt es eine Lösung für dieses Problem oder hat
nur mein XML-Parser (MSXML) einen Bug ?
wie bei Simon oder, wenn Du die XML-Datei nicht ändern darfst:
<xsl:template match="/">
<xsl:value-of select="/data/." disable-output-escaping="yes"/>
</xsl:template>
Gruß
Franz
Hallo,
zu schnell gelesen...
<xsl:template match="/">
<xsl:value-of select="/data/." disable-output-escaping="yes"/>
</xsl:template>
ist natürlich Unsinn..., vergesst es einfach ;-)
Gruß Franz
Hallo nochmal,
also, im XML-File benötigst Du: ö
Soweit waren wir ja dank Simon schon ;-)
Der XML-Parser macht daraus dann ö
So bekommt der XSLT-Prozessor das übergeben und macht daraus wieder:
ö
Im Browser wird dies dann natürlich als ö angezeigt, weil der wieder das Entity auflöst. Im Source steht allerdings: ö.
Und so ist es auch korrekt, da ein XSLT-Prozessor Markup-Zeichen bei der Ausgabe maskiert: also aus & amp; macht.
Um dies zu vermeiden, benötigst du nun das Attribut "disable-output-escaping" mit dem Wert "yes":
<xsl:template match="/">
<xsl:value-of select="/data/." disable-output-escaping="yes"/>
</xsl:template>
Das Ergebnis ist dann das Gewünschte: ö
ABER: Der IE zeigt Dir natürlich wieder an: ö, weil er das Entity ö beim Parsen wieder auflöst. Im Quellcode ist es aber korrekt.
So, nun musst du Dir nur noch raussuchen, was Du erreichen möchtest:
So, ich hoffe nun sind alle Klarheiten beseitigt ;-)
Gruß
Franz