Catharina Northe: XSL:FO und XML: Unicode wird nicht interpretiert

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[&#12473;&#12479;&#12540;&#12522; 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 &#12473;&#12479; 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

  1. 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[&#12473;&#12479;&#12540;&#12522; 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 &#12473;&#12479; 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

    1. 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

      1. 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

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      2. 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 &lt; und &amp; (oder &#38;) ersetzen. Bei > ist es zwar nicht wirklich notwendig, aber das kannst du auch durch &gt; ersetzen.
        ABER wenn du diese Ersetzungen machst, muss du das Attribut disable-output-escaping="yes" löschen, denn sonst hast du &lt; etc. dann im PDF stehen!

        Grüße
        Thomas