3.22

Sezione 3: Autori

Q 3.22: Come posso gestire l’HTML incorporato nel mio XML?

Provvedi nell’output, usa una copia profonda, o prova a disabilitare l’output escaping.

 

Oltre ad usare Sezioni CDATA, ci sono due occasioni comuni in cui le persone vogliono gestire HTML incorporato dentro un elemento XML:

  1. quando ricevono (possibilmente mal progettati) XML o HTML da qualche altra parte e devono trovare un modo per gestirlo;
  2. quando hanno un applicazione che è stata progettata esplicitamente per memorizzare una stringa di caratteri contenenti <and & riferimenti di entità di carattere con l’obiettivo di trasformarli nuovamente in markup in un processo successivo (ad es. FreeMind, Atom).

Generalmente, dovresti evitare questo tipo di trucco, dato che solitamente indica che la struttura del documento e il design sono stati pensati in modo sbagliato. Tuttavia, ci sono occasioni in cui diventa impossibile evitarlo, quindi hai davvero bisogno di usare markup HTML incorporato all’interno di XML, ed averlo processabile in seguito come markup, ci sono alcune tecniche che potresti usare:

  • Fornisce modelli per la gestione del markup nella tua trasformazione XSLT o qualsiasi software usi che riproduce semplicemente ciò che c’era in maniera intatta, ad es. se devi preservare<b>some text</b>così com’è, fornisci un modello per farlo:
<xsl:template match="h:b">
  <b>
    <xsl:apply-templates/>
  </b>
</xsl:template/>

(Se stati gestendo elementi da vari DTD o Schemi, probabilmente avrai bisogno di  Namespace per tenerli distinti, ergo il prefisso h:.)

  • Usa l’istruzione ‘copia profonda’ di XSLT, che restituisce markup ben formati nidificati verbatim, ad es.
<xsl:template match="h:b">
  <xsl:copy-of select="."/>
</xsl:template/>

 

  • Come ultima risorsa, usa l’attributodisable-output-escapingsull’elemento xsl:text di XSL[T] disponibile in alcuni elaboratori, ad es.
<xsl:text disable-output-escaping="yes"><![CDATA[<b>Now!</b>]]&gt;</xsl:text>

 

Questo ricade nel campo dei ‘trucchetti sporchi’, e solitamente viene deprecato. Alcuni elaboratori non lo supportano.

  • Alcuni processori (ad es. JX) ora forniscono il proprio equivalente per disabilitare l’escaping dell’output. I suoi sostenitori affermano che sia ‘molto desiderabile’ o ‘ciò che tutti vogliono’, ma deve comunque essere trattato con cura per prevenire il trasferimento di codice arbitrario indesiderato (possibilmente dannoso) intatto attraverso il tuo sistema. Aggiunge anche un’altra dipendenza al tuo software.

Per maggiori dettagli sull’utilizzo di queste tecniche in XSL[T], vedi la domanda relativa nel FAQ su XSL.

Leggi anche Quando dovrei usare una Sezione Marcata CDATA?, che è estremamente collegato.

Leave a Comment

Your email address will not be published. Required fields are marked *