When you want to output the value of node to destination, you can use <xsl:value-of select="xpath" />. This works only when the destination is not in side of an attribute. If the output is in side of an attribute, you need to use {}. For example.
<xsl:output method="html"/>
<xsl:variable name="sortorder">ascending</xsl:variable>
<xsl:template match="employees">
<xsl:apply-templates select="employee">
<xsl:sort select="." data-type="text" order="{$sortorder}"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="employee">
<a href="{.}"><xsl:value-of select="."/></a>
</xsl:template>
If you want to output a attribute of source element, you need to use @attributeName, or attribute::attributeName.
To add an attribute to an output node, you can also use xsl:attribute, like the following.
<xsl:template match="/">
<a>
<xsl:attribute name="href">http://google.com</xsl:attribute>
<xsl:text>Google</xsl:text>
</a>
</xsl:template>
Some time we want to convert element to attribute. For example, we want to convert
<Employee>
<Name>Fred</Name>
<Age>18</Age>
</Employee>
<Employee Name="Fred" Age="18" />
We can use this template
<xsl:template match="Employee">
<xsl:element name="{name(.)}">
<xsl:for-each select="*">
<xsl:attribute name="{name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
</xsl:element>
</xsl:template>
or
<xsl:template match="Employee">
<xsl:copy>
<xsl:for-each select="*">
<xsl:attribute name="{name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
</xsl:copy>
</xsl:template>
No comments:
Post a Comment