Frage

Ich versuche, XSLT Textausgabe zu verwenden, um eine Datei (in einem Dateiformat, das ich keine Kontrolle über bin) zu erzeugen, und während es hauptsächlich Text ist, enthält es niedrige Ordnung nicht druckbare Zeichen wie Fahnen, einschließlich Zeichen, die nicht gültig innerhalb einer XLST Datei sind (nach der XSLT-Spezifikation).

ich für so etwas wie die unten möchte zu arbeiten, sondern es ist keine gültige XSLT-Datei, da sie es Zeichen enthält, die in XSLT-Dateien nicht erlaubt sind:

<?xml version="1.0" encoding="US-ASCII" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text" encoding="US-ASCII"/>
  <xsl:template match="/">&#1;</xsl:template>
</xsl:stylesheet>

Ich erhalte den folgenden Fehler:

[Fatal Error] :4:35: Character reference "&#1" is an invalid XML character.
ERROR:  'Character reference "&#1" is an invalid XML character.'
FATAL ERROR:  'Could not compile stylesheet'

Ich habe 1 auch mit einem tatsächlichen Charakter versucht, mit oder ohne CDATA-Abschnitt, xsl: Textelemente, xslt-2-Zeichen-Karten, ein paar verschiedener Kodierungen, aber ich kann nicht herausfinden, wie man eine ascii erhalten Zeichen mit binären Code = 1 ist.

Ich habe zu Nachverarbeitung meiner Ausgabe zurückgreifen musste, was nicht ideal ist.

Gibt es eine Möglichkeit, eine einzelne niedrige Ordnung nicht-druckbare Zeichen Ausgabe von XSLT zu generieren?

Umgebung: Java 6, gebaut in XSL Transformator

.
War es hilfreich?

Lösung

können Sie rufen statische Methoden von Java-Klassen von XSLT. Verwenden Sie den folgenden Hack zum Beispiel 0x01 zu Ihrem Ausgangsstrom zu schreiben:

<?xml version="1.0" encoding="US-ASCII" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:char="java.lang.Character" version="1.0">
    <xsl:output method="text" encoding="US-ASCII" />
    <xsl:template match="/">
        <xsl:value-of select="char:toString(1)"></xsl:value-of>
    </xsl:template>
</xsl:stylesheet>

Andere Tipps

Eine weitere Option, die ich habe kommen mit, ist ein xsl zu verwenden:. Param, die die anrufende Umgebung Charakter 0x01 setzt

Dies bedeutet, dass anstatt immer innerhalb einer Java-Umgebung zu arbeiten, und Änderungen anderswo erfordern, dass das Stylesheet in allen Umgebungen Umwelt Unterstützung benötigt, kann aber in all unverändert funktionieren.

Ich bin noch nicht sicher, welche Seite dieses Kompromisses vorzuziehen ist für das, was ich arbeite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top