Como não produzir espaço em branco no XSLT para um elemento que tem atributos
-
25-09-2019 - |
Pergunta
Eu tenho um documento XSLT e quero emitir uma tag âncora (a) com alguns atributos cujos valores dependem de outras coisas. Assim, eu uso a tag xsl: atributo com uma escolha/se abaixo dela (ou vice-versa). Então, meu código se parece com o seguinte:
<a href="/somepage.html">
<xsl:if test="current_page='this_page'">
<xsl:attribute name='class'>active</xsl:attribute>
</xsl:if>
My Page
</a>
No entanto, o problema está então, na saída HTML, todas as linhas/espaços estão lá, o que acaba fazendo meu link ter um espaço extra à esquerda (e está sublinhado, tornando -o óbvio). Portanto, a solução óbvia é fazer isso:
<a href="/somepage.html"><xsl:if test="current_page='this_page'"><xsl:attribute name='class'>active</xsl:attribute></xsl:if>My Page</a>
para se livrar do espaço. Não é muito importante no código acima, mas minha página real tem muito mais lógica, tornando isso realmente feio. A única outra coisa que consigo pensar para limpar isso é colocar a lógica fora da geração de links, mas depois estou repetindo as coisas mais e tendo que criar mais variáveis. O que é razoável, mas ainda não é totalmente ideal. Este é apenas um exemplo em que eu queria fazer isso, aconteceu várias outras vezes, então eu estava me perguntando se existem outras maneiras de resolver isso.
Solução
Talvez você possa usar isso no início do documento XSLT:
<xsl:strip-space elements="a"/>
Atualizar, isso funciona:
<a href="/somepage.html">
<xsl:if test="current_page='this_page'">
<xsl:attribute name='class'>active</xsl:attribute>
</xsl:if>
<xsl:text>My Page</xsl:text>
</a>
Outras dicas
Seria um simples xsl:strip-space
No topo de sua folha de estilo, seja suficiente?
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:strip-space elements="*"/>
...
</xsl:stylesheet>