xsl:element
Vi har set, hvordan vi kan generere nye xml dokumenter gennem xsl transformationer, men hvis vi vil have elementnavne i det nye xml dokument, der afhænger af indholdet af det oprindelige xml dokument skal vi have fat i xsl:element. Syntaksen er som følger:
<xsl:element name="element navn"
use-attribute-sets="attributset navn"
namespece="namespaceuri" />
Og et lille eksempel
<xsl:element name="blabla">En lille tekst</xsl:element>
Vil give dette resultat
<blabla>En lille tekst</blabla>
Det er jo ikke specielt sjovt, men vi kan også skrive
<xsl:element name="{.}">En lille tekst</xsl:element>
Kører man dette mod
Vil man få
<Andrea>En lille tekst</Andrea>
ud. Det er i sagens natur vigtigt at indholdet af de elementer man vil bruge som elementnavne er lovlige XML navne - ellers går det galt.
Et lille eksempel - først et xml dokument:
<?xml version="1.0" encoding="UTF-8"?>
<Tagnames>
<Root>Track</Root>
<Elements>
<Element>CD</Element>
<Element>Artist</Element>
<Element>CD-Title</Element>
</Elements>
</Tagnames>
og dernæst et stylesheet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:template match="/">
<Music><xsl:apply-templates select="Tagnames/Root"/></Music>
</xsl:template>
<xsl:template match="Root">
<xsl:element name="{.}"><xsl:apply-templates select="following-sibling::Elements/Element"/>
</xsl:element>
</xsl:template>
<xsl:template match="Element">
<xsl:element name="{.}">bla bla</xsl:element>
</xsl:template>
</xsl:stylesheet>