Serializando nós XML em XSL

Usar o XSL como um mecanismo de modelagem para projetos é algo que eu gostaria de pensar que desapareceu, em favor de coisas como Twig e Smarty que podem fazer o trabalho muito melhor. Mas às vezes você se vê tendo que depurar ou adicionar recursos a algum XSL existente, e descobrir o que está acontecendo com sua entrada XML pode ser um pesadelo, especialmente quando você tem uma carga de modelos aninhados com parâmetros indo aqui e ali. No final, você está olhando para a tela, a cabeça nas mãos, xingando seu código – e isso não ajuda ninguém.

O que você precisa fazer é serializar um nó em um ponto em seu modelo para que você possa descobrir por que não consegue obter aquele valor f @%! Ing de que você precisa. Ao contrário dos motores de modelagem modernos, você não tem nada à mão. BEM, TENTE ESTE SOLDADO!

Adicione os seguintes modelos à sua folha de estilo (ou, francamente, qualquer folha de estilo que você conhece que seu ambiente irá escolher):

<xsl:template match="*" mode="serialize">
<xsl:text>&lt;</xsl:text><xsl:value-of select="name(.)" />
<xsl:text>&gt;</xsl:text>
<xsl:apply-templates mode="serialize" />
<xsl:text>&lt;/</xsl:text><xsl:value-of select="name(.)" />
<xsl:text>&gt;</xsl:text>
</xsl:template>

<xsl:template match="text()" mode="serialize">
<xsl:value-of select="." />
</xsl:template>

Divulgação: encontrei o básico disso aqui , formatei melhor e, essencialmente, corrigi os <e> que são renderizados como <e> naquele site

Feito isso, quando você estiver nas profundezas do aninhamento, em um loop for-each ou o que for, você pode controlar as coisas incluindo:

<xsl:apply-templates select="." mode="serialize" />

Que produzirá XML. XML básico não formatado sem parâmetros, mas XML do mesmo jeito. E, com sorte, você saberá onde está!

Atualizar
Se você estiver se sentindo atrevido, basta despejar seu nó em uma textarea. Eu não estava ciente disso até que um vigarista me contou. CHEEKY!

<textarea><xsl:copy-of select="." /><textarea>

Talvez eu deva fazer outro protip com esta pepita de conhecimento recém-adquirido e limpar os gráficos de protip do XSL …