[Home] [By Thread] [By Date] [Recent Entries]
Hi Raj,
Here's a not-so-orthodox solution (I think, not sure though) to your inquiry. It works as follows: grab the last item of each element and create a "List" element or a "copy" element to the output stream depending on the count of the node. If it is supposed to become a "List" element, it will copy all the nodes with the same name into that list. Here's the code (hope the lines are not messed up by the mailer): <?xml version="1.0" encoding="UTF-8"?> <?altova_samplexml testRaj.xml?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output indent="yes" method="xml" /> <xsl:template match="Root">
<xsl:copy>
<xsl:apply-templates
select="year[position() = last()]" />
<xsl:apply-templates
select="month[position() = last()]" />
<xsl:apply-templates
select="week[position() = last()]" />
<xsl:apply-templates
select="day[position() = last()]" />
</xsl:copy>
</xsl:template><xsl:template match="*">
<xsl:variable name="curName" select="name()" />
<xsl:if test="count(../*[name() = $curName]) > 1">
<xsl:element name="{local-name(.)}List">
<xsl:copy-of select="../*[name() = $curName]" />
</xsl:element>
</xsl:if>
<xsl:if test="count(../*[name() = $curName]) = 1">
<xsl:copy-of select="." />
</xsl:if>
</xsl:template></xsl:stylesheet>
Arulraj wrote: Hi,
|

Cart



