Tome-se como exemplo o seguinte XML:
<elem>Valor_1
<data>
Data_2
</data>
<data>
Data_3
</data>
</elem>
Agora vou definir uma template em que só quero ter como output os valores dentro das tags <data>:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match ="/elem/data">
<xsl:value-of select ="."/>
</xsl:template>
</xsl:stylesheet>
Como output tenho:
Valor_1
Data_2
Data_3
Porque raio aparece o "Valor_1" se só defini template para mostrar os valores dentro da tag <data>? O motivo é um dos buil-in templates. O que são buil-in templates? São templates definidas por omissão, que estão presentes mesmo que não sejam definidas explicitamente, a solução é fazer o override ao template. Neste caso o template é algo do género:
<xsl:template match ="text()|@*">
<xsl:value-of select ="."/>
</xsl:template>
Logo para obtermos o resultado desejado inicialmente o nosso ficheiro XSLT será algo do género:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match ="/elem/data">
<xsl:value-of select ="."/>
</xsl:template>
<!-- override Built-in template rule para texto e atributos dos nós -->
<xsl:template match="text()|@*"/>
</xsl:stylesheet>
Sem comentários:
Enviar um comentário