RE: [xsl] Process same template 2X?

Subject: RE: [xsl] Process same template 2X?
From: Nirmala R <nirmala.r@xxxxxxxxxx>
Date: Sat, 19 Oct 2002 10:24:47 +0530
Hi,

I assume that you want to put all the category with level2 under level1 as
subcat.

You can have a stylesheet like this:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
    <xsl:output indent="yes" method="xml"/>
        <xsl:template match="/cats">
        <cats>

            <xsl:apply-templates select="category"/>

        </cats>
    </xsl:template>

    <xsl:template match="category">
    <xsl:if test="@level=1">
    <category>

        <xsl:attribute name="name">
            <xsl:value-of select="@name"/>
        </xsl:attribute>

	<xsl:for-each select="following::category">
	<xsl:if test="@level=2">
        <subcat>
            <xsl:attribute name="name">
            <xsl:value-of select="@name"/>
            </xsl:attribute>
        </subcat>
	</xsl:if>
	</xsl:for-each>
    </category>
    </xsl:if>
    </xsl:template>
    </xsl:stylesheet>

This will take care of the case excluding a sibling with the category level
as 1 also inaddition to your requirement.

Hope I answered your query,
Nirmala

-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Geoff
Hankerson
Sent: Saturday, October 19, 2002 1:22 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] Process same template 2X?


I want to transform this xml :

<?xml version="1.0" encoding="UTF-8"?>
<cats>
<category level="1" name="Business Law"/>
<category level="2" name="Corporations" parent="Business Law">
</category>
<category level="2" name="Nonprofit Corporations*" parent="Business Law">
</category>
</cats>

Into this xml:
<?xml version="1.0" encoding="UTF-8"?>
<cats>
<category name="Business Law"/>
    <subcat name="Corporations"/>
    <subcat name="Nonprofit Corporations*">
</category>
</cats>

It seems it should be simple but is giving me fits. Current stylesheet
(stinks) is this:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
    <xsl:output indent="yes" method="xml"/>
        <xsl:template match="/cats">
        <cats>

            <xsl:apply-templates select="category"/>

        </cats>
    </xsl:template>
    <xsl:template match="category">
    <xsl:if test="@level=1">
    <category>

        <xsl:attribute name="name">
            <xsl:value-of select="@name"/>
        </xsl:attribute>
        <subcat>
            <xsl:attribute name="name">
            <xsl:value-of select="following-sibling::category/@name"/>
            </xsl:attribute>

        </subcat>
    </category>
    </xsl:if>
    </xsl:template>
    </xsl:stylesheet>

Current stlyesheet returns this:
<?xml version="1.0" encoding="UTF-8"?>

<cats>

  <category name="Business Law">

    <subcat name="Corporations"/>

  </category>

</cats>

the 3rd category node in the orginal xml does not get processed how can
I assure all fllowing category nodes get processed?


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread