Em XSLT existe o
<xsl:value-of select="expression"/>
para obter o valor de um elemento, mas há algo para selecionar o nome da tag do elemento?
Em uma situação como esta:
<person>
<!-- required stuff -->
<name>Robert</name>
<!-- optional stuff, free form for future extension.
Using XMLSchema's xsd:any -->
<profession>programmer</profession>
<hobby>photography</hobby>
</person>
<xsl:for-each select="person">
<xsl:tag-of select="."/> : <xsl:value-of select="."/>
</xsl:for-each>
Para obter resultados como este:
name : Robert profession : programmer hobby : photography
Claro que o XSLT acima não compilará porque
<xsl:tag-of select="expression"/>
não existe. Mas como isso poderia ser feito?
Respostas:
Isso lhe dará o nome do elemento atual (nome da tag)
OP-Edit: Isso também resolverá o problema:
fonte
Ninguém apontou a diferença sutil na semântica das funções
name()
elocal-name()
.name(someNode)
retorna o nome completo do nó, e isso inclui o prefixo e dois pontos, caso o nó seja um elemento ou atributo.local-name(someNode)
retorna apenas o nome local do nó, e isso não inclui o prefixo e dois pontos caso o nó seja um elemento ou um atributo.Portanto, em situações em que um nome pode pertencer a dois namespaces diferentes, deve-se usar a
name()
função para que esses nomes ainda sejam distinguidos.E, BTW, é possível especificar ambas as funções sem nenhum argumento :
name()
é uma abreviatura paraname(.)
local-name()
é uma abreviatura paralocal-name(.)
Por fim , lembre-se de que não apenas os elementos e atributos têm nomes, essas duas funções também podem ser usadas em PIs e neles são idênticas).
fonte
fonte
Para os interessados, não há:
No entanto, você pode recriar a tag / elemento indo:
Isso é útil em um modelo xslt que, por exemplo, lida com a formatação de valores de dados para muitos elementos diferentes. Quando você não sabe o nome do elemento que está sendo trabalhado e ainda pode gerar o mesmo elemento e modificar o valor, se necessário.
fonte
fonte