Domanda

Qual è il modo migliore per includere un'entità HTML in XSLT?

<xsl:template match="/a/node">
    <xsl:value-of select="."/>
    <xsl:text>&nbsp;</xsl:text>
</xsl:template>

questo restituisce a XsltParseError

È stato utile?

Soluzione

È possibile utilizzare la sezione CDATA

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>

oppure puoi descrivere &nbsp nel DTD locale:

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>

o semplicemente usare &#160; invece di &nbsp;

Altri suggerimenti

È anche possibile estendere l'approccio dalla 2a parte del la risposta di aku e ottieni tutti i riferimenti ai personaggi conosciuti disponibili, in questo modo:

<!DOCTYPE stylesheet [
  <!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
      "http://www.w3.org/2003/entities/2007/w3centities-f.ent">
  %w3centities-f;
]>
...
<xsl:text>&nbsp;&minus;30&deg;</xsl:text>

C'è una certa differenza nel risultato rispetto a <xsl:text disable-output-escaping="yes"> approccio.Quest'ultimo produrrà stringhe letterali come &nbsp; per tutti i tipi di output, anche per <xsl:output method="text">, e questo potrebbe essere diverso da quello che potresti desiderare...Al contrario, ottenendo entità definite per il modello XSLT tramite <!DOCTYPE ... <!ENTITY ... produrrà sempre un output coerente con il tuo xsl:output impostazioni.

Potrebbe essere saggio quindi utilizzare un risolutore di entità locale per impedire al motore XSLT di recuperare le definizioni di entità carattere da Internet.Gli utenti JAXP o Xalan-J espliciti potrebbero aver bisogno di una patch affinché Xalan-J utilizzi correttamente il risolutore.Vedi il mio blog XSLT, entità, Java, Xalan... per il download delle patch e i commenti.

un'altra possibilità per utilizzare entità html da xslt è la seguente:

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>

XSLT gestisce solo le cinque entità di base per impostazione predefinita: lt, gt, apos, quot, E amp.Tutti gli altri devono essere definiti come @Aku menziona.

questo restituisce a XsltParseError

Sì, e il motivo è quello &nbsp; non è un'entità predefinita in XML o XSLT come in HTML.

Potresti semplicemente usare il carattere unicode which &nbsp; sta per: &#160;

Ora che esiste Unicode, è generalmente controproducente utilizzare entità carattere con nome.Consiglierei di utilizzare il carattere Unicode per uno spazio unificatore anziché per un'entità, proprio per questo motivo.In alternativa, potresti utilizzare l'entità &#160;, invece dell'entità denominata.L'utilizzo di entità denominate rende il tuo XML dipendente da un DTD in linea o esterno.

Ho scoperto che tutte queste soluzioni producevano un carattere  nello spazio vuoto.

Utilizzando <xsl:text> </xsl:text> mi ha risolto il problema;Ma <xsl:text>#x20;</xsl:text> potrebbe funzionare anche

Grazie per le tue informazioni.Ho scritto un breve post sul blog basato su ciò che ha funzionato per me mentre stavo eseguendo la trasformazione XSLT in un modello di CMS web dinamico.

Il post del blog è qui: Come aggiungere entità ai modelli XSLT.

/Sten Hougaard

È necessario utilizzare l'entità #x160;

Non ho avuto fortuna con l'approccio DOCTYPE di Aku.

Ciò che ha funzionato per me nelle trasformazioni MSXML su un server Windows 2003 è stato

    <xsl:text disable-output-escaping="yes">&amp;#160;</xsl:text>

Una sorta di ibrido tra i precedenti.Grazie ai contributori di Stackoverflow!

Dovrebbe essere sufficiente uno spazio tra i tag di testo.

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