XSL:FO und XML: Unicode wird nicht interpretiert
Catharina Northe
- xsl
Hallo!
Hier wurde mir schon einmal sehr gut geholfen. Jetzt habe ich noch eine neue Frage. Ich möchte mit XSL:FO aus einer XML-Datei ein Pdf erzeugen. In der XML-Datei sind die Daten alle mit CDATA gekennzeichnet, z.B.:
<value><![CDATA[Irgendein Wert, eventuell mit Sonderzeichen]]></value>
Das klappt auch alles wunderbar, aber seit neuestem werden in die XML-Datei auch Unicode-Zeichen eingefügt, z.B. japanische Schriftzeichen:
<value><![CDATA[スターリ und noch mehr Text, nicht in Unicode]]></value>
Da der Wert wegen des CDATA von XSL nicht interpretiert wird, stehen in der Pdf-Datei nicht die japanischen Schriftzeichen, sondern スタ und so weiter. Kann man XSL irgendwie beibringen, dass es die Zeichen doch interpretieren soll? Die japanischen Schriftzeichen werden richtig interpretiert, wenn man das CDATA in der XML-Datei weglässt, aber es kann vorkommen, dass Zeichen wie "<" in den Texten vorkommen, die nicht zu Fehlern führen dürfen. Darum würde ich ungern das CDATA weglassen, sondern das Problem, wenn es geht, irgendwie anders lösen.
Hat jemand einen Tipp für mich?
Schöne Grüße,
Cathie
Hallo,
Ich möchte mit XSL:FO aus einer XML-Datei ein Pdf erzeugen. In der XML-Datei sind die Daten alle mit CDATA gekennzeichnet, z.B.:
<value><![CDATA[Irgendein Wert, eventuell mit Sonderzeichen]]></value>
Das klappt auch alles wunderbar, aber seit neuestem werden in die XML-Datei auch Unicode-Zeichen eingefügt, z.B. japanische Schriftzeichen:
<value><![CDATA[スターリ und noch mehr Text, nicht in Unicode]]></value>
Da der Wert wegen des CDATA von XSL nicht interpretiert wird, stehen in der Pdf-Datei nicht die japanischen Schriftzeichen, sondern スタ und so weiter. Kann man XSL irgendwie beibringen, dass es die Zeichen doch interpretieren soll?
Wenn du mit XSLT die FO-Datei erzeugst, nehme ich an, dass du den Text mit value-of ausgibst. In diesem Fall kannst du das Attribut disable-output-escaping="yes" im value-of (http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#value_of) verwenden.
Grüße
Thomas
Wenn du mit XSLT die FO-Datei erzeugst, nehme ich an, dass du den Text mit value-of ausgibst. In diesem Fall kannst du das Attribut disable-output-escaping="yes" im value-of (http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#value_of) verwenden.
Hallo Thomas!
Also ich habe jetzt alle CDATA aus der XML-Datei herausgelöscht. Dafür steht bei jedem "value-of" ein disable-output-escaping="yes". Beim Erzeugen der Pdf-Datei klappt alles, bis man ein "<" Zeichen in die Daten einfügt. Dann kommt die Fehlermeldung "A name was started with an invalid character".
Also wenn es nicht anders geht, könnte ich die XML-Datei vorher durchlaufen und das "<" in ein Unicode-Zeichen umwandeln. Das sollte wahrscheinlich funktionieren, oder? Gibt es denn viele solcher "kritischer Zeichen", die nicht vorkommen dürfen?
Grüße
Cathie
Hi,
und das "<" in ein Unicode-Zeichen umwandeln.
< ist schon ein Unicode-Zeichen ...
Das sollte wahrscheinlich funktionieren, oder? Gibt es denn viele solcher "kritischer Zeichen", die nicht vorkommen dürfen?
&
cu,
Andreas
Hallo,
Also ich habe jetzt alle CDATA aus der XML-Datei herausgelöscht. Dafür steht bei jedem "value-of" ein disable-output-escaping="yes".
Wenn du das CDATA gelöscht hast, ist das Attribut auch nicht notwendig, das hättest du nur gebraucht wenn CDATA geblieben wäre.
Beim Erzeugen der Pdf-Datei klappt alles, bis man ein "<" Zeichen in die Daten einfügt. Dann kommt die Fehlermeldung "A name was started with an invalid character".
Ja, nachdem du CDATA gelöscht hast, muss der Parser meckern.
Also wenn es nicht anders geht, könnte ich die XML-Datei vorher durchlaufen und das "<" in ein Unicode-Zeichen umwandeln. Das sollte wahrscheinlich funktionieren, oder? Gibt es denn viele solcher "kritischer Zeichen", die nicht vorkommen dürfen?
Wenn du das machst, sollst du < und & duch die Entities < und & (oder &) ersetzen. Bei > ist es zwar nicht wirklich notwendig, aber das kannst du auch durch > ersetzen.
ABER wenn du diese Ersetzungen machst, muss du das Attribut disable-output-escaping="yes" löschen, denn sonst hast du < etc. dann im PDF stehen!
Grüße
Thomas