Come posso inserire
In un foglio di stile XSLT, continuo a ricevere questo errore:
Errore di analisi XML: entità non definita
Fondamentalmente voglio un carattere spaziale non interrotto nel modello XSLT.
Come posso inserire
In un foglio di stile XSLT, continuo a ricevere questo errore:
Errore di analisi XML: entità non definita
Fondamentalmente voglio un carattere spaziale non interrotto nel modello XSLT.
Risposte:
Usa il codice entità  
invece il .
è un "riferimento entità carattere" HTML. Non esiste un'entità denominata per lo spazio non-breaking in XML, quindi si utilizza il codice  
.
Wikipedia include un elenco di entità XML e HTML e puoi vedere che ci sono solo 5 "entità predefinite" in XML, ma HTML ha oltre 200. Indicherò anche la creazione di uno spazio (& nbsp;) in XSL che ha risposte eccellenti.
Š
invece di  
quest'ultimo, che si risolverà sempre in uno spazio non-break Unicode.
 
funziona davvero bene. Tuttavia, mostrerà uno di quegli strani personaggi nella codifica ANSI. <xsl:text>
ha funzionato meglio per me.
<xsl:text> </xsl:text>
Si può anche fare questo:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping
, cosa che non è richiesta ed è stato deprecato in XSLT 2.0 e più in 3.0. In queste versioni è possibile ottenere lo stesso effetto con il xsl:character-map
funzionamento multiprocessore garantito. Inoltre, questo posiziona un'entità denominata
nell'output, che non è necessariamente uguale a uno spazio non interrotto e l'estremità ricevente deve avere questa entità dichiarata (in HTML è di solito implicitamente).
Usa questo
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
modifica: i downvoter dovrebbero probabilmente verificare che funzioni prima (funziona ed è la soluzione più generale al problema).
Potresti voler aggiungere la definizione per questa entità all'inizio del file (sotto la dichiarazione xml):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
Inoltre puoi aggiungere più entità come Ntilde, Aacute, ecc.
Oltre alla risposta di Victor Hugo, è possibile ottenere tutti i riferimenti a personaggi noti legali in un file XSLT, 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>& –</xsl:text>
C'è anche una certa differenza nel risultato di questo approccio rispetto a <xsl:text disable-output-escaping="yes">
uno. Quest'ultimo produrrà valori letterali di stringa come
per tutti i tipi di output, anche per <xsl:output method="text">
, e questo potrebbe essere diverso da quello che potresti desiderare ... Al contrario, ottenere entità definite per il modello XSLT <!DOCTYPE ... <!ENTITY ...
produrrà sempre un output coerente con il tuoxsl:output
impostazioni.
E quando si includono tutti i riferimenti ai caratteri, potrebbe essere saggio utilizzare un risolutore di entità locale per impedire al motore XSLT di recuperare le definizioni delle entità dei caratteri da Internet. Gli utenti JAXP o espliciti Xalan-J potrebbero aver bisogno di una patch per Xalan-J per utilizzare correttamente il resolver. Vedi il mio blog XSLT, entità, Java, Xalan ... per scaricare patch e commenti.
Quando usi il seguente (senza disable-output-escaping
!) Otterrai un unico spazio non-break:
<xsl:text> </xsl:text>
disable-output-escaping
per questo
I fogli di stile XSLT devono essere XML ben formati. Poiché " "
non è una delle cinque entità XML predefinite , non può essere inclusa direttamente nel foglio di stile. Quindi tornare alla tua soluzione " "
è un perfetto sostituto di" "
che dovresti usare.
Esempio:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
puoi anche usare:
<xsl:value-of select="'&nbsp'"/>
ricorda l'amplificatore dopo il & o riceverai un messaggio di errore
&nbsp;
(supponendo che tu abbia intenzione di essere punto e virgola essere lì), che renderà come
, non come `` (nb-spazio).
Stavo cercando di visualizzare i bordi su una cella vuota in una tabella HTML. Il mio vecchio trucco di utilizzare lo spazio non-break in celle vuote non funzionava da xslt. Ho usato l'interruzione di linea con lo stesso effetto. Lo dico nel caso in cui il motivo per cui stavi cercando di utilizzare lo spazio non-break fosse quello di dare del contenuto a una cella di tabella "vuota" per attivare i bordi delle celle.
<br/>
Prova ad usare
<xsl:text> </xsl:text>
Ma dipende dal processore XSLT che stai utilizzando: le specifiche XSLT non richiedono processori XSLT per convertirlo in "
".
Sebbene la risposta sia già stata fornita da @brabster e altri.
Penso che una soluzione più riutilizzabile sarebbe:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>