Domanda

Sto cercando di utilizzare l'output di testo XSLT per generare un file (in un formato di file che non sono in controllo di), e mentre è in gran parte il testo, si comprende di ordine inferiore caratteri non stampabili come bandiere, compresi i caratteri che non sono validi all'interno di un file XSLT (secondo la specifica XSLT).

Vorrei che qualcosa di simile al seguente per lavorare, ma invece non è un file XSLT valida dal momento che contiene caratteri che non sono consentiti nel file XSLT:

<?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>

ottengo il seguente errore:

[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'

Ho provato con un carattere reale 1 troppo, con o senza una sezione CDATA, xsl: elementi di testo, XSLT-2 mappe carattere, un paio di differenti codifiche, ma non riesco a capire come ottenere un ascii carattere con il codice binario = 1.

Ho dovuto ricorrere a post-processing mia uscita, che non è ideale.

C'è un modo per generare un unico basso ordine di uscita carattere non stampabile da XSLT?

Ambiente: Java 6, costruita nel XSL trasformatore

.
È stato utile?

Soluzione

È possibile chiamare i metodi statici di classi Java da XSLT. Ricorrendo a un trucco ad esempio di scrivere 0x01 al vostro flusso di uscita:

<?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>

Altri suggerimenti

Un'altra opzione che mi è venuta in mente, è quello di utilizzare un xsl:. Param cui l'ambiente chiamando imposta a carattere 0x01

Ciò significa che invece di lavorare sempre all'interno di un ambiente Java, e che richiedono modifiche in qualsiasi altro luogo, che il foglio di stile richiede il supporto ambientale in tutti gli ambienti, ma può funzionare invariate in tutti loro.

Non ne sono ancora sicuro di quale lato di quel trade-off è preferibile per quello che sto lavorando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top