Paolo Pialorsi

SOA, Workflow Foundation (WF), Windows Communication Foundation (WCF) e le Architetture Distribuite

News

Archives

XSLT: il comando text e l'output-escaping

A volte nello scrivere l'output di una trasformazione XSLT fa comodo anche generare del testo. Sembra una cosa normale, e tuttosommato anche facile.

In effetti è così, salvo quando per esempio vogliamo preservare dei caratteri in output, o vogliamo scrivere degli spazi o dei simboli di "a capo" che devono essere mantenuti come tali.

Il comando text serve per forzare in output del testo a nostra scelta, per esempio uno spazio, che altrimenti sarebbe ignorato di default dal parser. Inoltre possiamo chiedere al comando text, così come anche al comando value-of di disabilitare l'output-escaping. Che significa? Significa che se noi passiamo dei caratteri che in output sarebbe necessario presentare con dei simboli di escape come &lt; ed &gt; per esempio al posto di > e <, il comando produrrà invece in output proprio > e <.

Quando ci può servire? Un caso tipico è quando vogliamo scrivere in output del codice HTML letto dal contenuto di un nodo o di un attributo.

Pensiamo al seguente XML:

<?xml version="1.0"?>
<documento>
 <titolo>Titolo del documento</titolo>
 <contenuto>
  &lt;p&gt;Questo è un paragrafo HTML letto da un DB
  o da qualunque altra fonte e scritto nel tag di nome
  &lt;i&gt;contenuto&lt;/i&gt; come HTML Encoded. In output
  vogliamo però averlo come HTML normale&lt;/p&gt;
 </contenuto>
</documento>

Per ottenere in output:

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Titolo del documento</title>
</head>
<body>
  <p>Questo è un paragrafo HTML letto da un DB
  o da qualunque altra fonte e scritto nel tag di nome
  <i>contenuto</i> come HTML Encoded. In output
  vogliamo però averlo come HTML normale</p>
 </body>
</html>

dovremo dire alla trasformazione XSLT:

<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" />

<xsl:template match="/">
 <html>
  <head>
   <title><xsl:value-of select="documento/titolo" /></title>
  </head>
  <body>
   <xsl:value-of select="documento/contenuto" disable-output-escaping="yes" />
  </body>
 </html>
</xsl:template>

</xsl:transform>

http://www.devleap.com/Downloads/Blogs/Paolo/TutorialXSLT/documento.xml

http://www.devleap.com/Downloads/Blogs/Paolo/TutorialXSLT/documento.xslt

 

Posted: dic 15 2003, 11:48 by paolo
Filed under: