2009-07-09 7 views
1

Ich versuche, XSLT-Textausgabe zu verwenden, um eine Datei zu generieren (in einem Dateiformat, das ich nicht unter Kontrolle habe), und während es hauptsächlich Text ist, enthält es nicht druckbare Zeichen niedriger Ordnung als Flags, einschließlich Zeichen, die in einer XLST-Datei nicht gültig sind (gemäß der XSLT-Spezifikation).Erstelle niederwertige nicht druckbare Zeichen aus XLST

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 sind nicht erlaubt:

<?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 folgende erhalten 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 mit einem tatsächlichen Charakter 1 auch versucht haben, mit oder ohne CDATA-Abschnitt, xsl: Textelemente, xslt-2-Zeichen-Karten, ein paar verschiedene Kodierungen, aber ich kann nicht verstehen heraus, wie man ein ASCII-Zeichen mit Binärcode = 1 erhält.

Ich musste meine Ausgabe nachbearbeiten, was nicht ideal ist.

Gibt es eine Möglichkeit, eine einzelne niederwertige, nicht druckbare Zeichenausgabe von XSLT zu generieren?

Umgebung: Java 6, eingebauter XSL Transformer.

Antwort

3

Sie können statische Methoden von Java-Klassen aus XSLT aufrufen. 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> 
+0

Danke - das funktioniert für meine Umwelt. Gibt es keine reine XSLT-Lösung? –

+0

Ich denke, die ursprüngliche Intension von XSLT besteht darin, "lesbare" Ausgaben zu erzeugen, keine binären Daten. Binäre Dokumentformate sind die Domäne von XSL-FO. Für "echte" Binärformate ist XSL nicht das Mittel der Wahl. – ftl

+0

Meine Ausgabe ist meist lesbarer Text. Ich passe bestehende xslt-Stylesheets an, die ursprünglich für die Erstellung von HTML entwickelt wurden. Mit einer kleinen Änderung arbeiten sie fast genau so, wie ich es brauche. –

0

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

Das bedeutet, dass das Stylesheet nicht in einer Java-Umgebung arbeiten muss und anderswo geändert werden muss, sondern in allen Umgebungen Umgebungsunterstützung erfordert, aber in allen Umgebungen unverändert bleiben kann.

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