[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Re: Converting the flat XML to hierarchical format

Subject: RE: Re: Converting the flat XML to hierarchical format (plus grouping, data replication and sorting)
From: Shyam Chebrolu <schebrolu@xxxxxxxxxxxxxxx>
Date: Wed, 30 Jan 2002 14:01:13 -0500
hierarchical format
I tried to post this before. It was bounced back for some reason... 

Anyway, I was able to comeup with some solution. But it is not complete.

I couldn't figure out how to sort the items after they are grouped...

I used the below XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

	<xsl:key name="products-by-group" match="GROUP_ID" use="." /> 
	<xsl:variable name="product-id" select="DATA/PRODUCT_ID" /> 
	<xsl:variable name="product-desc" select="DATA/PRODUCT_DESC"/> 
	<xsl:variable name="group-id" select="DATA/GROUP_ID"/> 

	<xsl:template match="/">
	<DATA>
		<xsl:for-each select="DATA/GROUP_ID[count(. |
key('products-by-group', .)[1]) = 1]">
		<PRODUCTS>
			<xsl:attribute name="ID"><xsl:value-of  select="."
/></xsl:attribute>
			<xsl:variable name="n" select="." />

			<xsl:for-each select="$group-id[. = $n or . = 0]">
				<xsl:variable name="index"
select="count(preceding-sibling::GROUP_ID) + 1" />
				<PRODUCT>
					<xsl:copy-of
select="$product-id[$index]" /> 
				  	<xsl:copy-of
select="$product-desc[$index]" /> 
				</PRODUCT>
			</xsl:for-each>
		</PRODUCTS>
		</xsl:for-each>
	</DATA>
	</xsl:template>
</xsl:stylesheet>



-----Original Message-----
From: Shyam Chebrolu 
Sent: 01/30/2002 8:55 AM
To: 'XSL-List@xxxxxxxxxxxxxxxxxxxxxx'
Subject: Re: Converting the flat XML to hierarchical format (plus grouping,
data replication and sorting)


I was hoping that I could accomplish the following using XSLT.. Any
direction would be really appreciated

-Thanks
Shyam

-----------------

I have a XML data file in the following format (flat):

<DATA>

<PRODUCT_ID>1</PRODUCT_ID>
<PRODUCT_DESC>Product 1</PRODUCT_DESC>
<GROUP_ID>0</GROUPD_ID>

<PRODUCT_ID>2</PRODUCT_ID>
<PRODUCT_DESC>Product 2</PRODUCT_DESC>
<GROUP_ID>0</GROUPD_ID>

<PRODUCT_ID>3</PRODUCT_ID>
<PRODUCT_DESC>Product 3</PRODUCT_DESC>
<GROUP_ID>0</GROUPD_ID>

<PRODUCT_ID>4</PRODUCT_ID>
<PRODUCT_DESC>Product 4</PRODUCT_DESC>
<GROUP_ID>1</GROUPD_ID>


<PRODUCT_ID>5</PRODUCT_ID>
<PRODUCT_DESC>Product 5</PRODUCT_DESC>
<GROUP_ID>1</GROUPD_ID>


<PRODUCT_ID>6</PRODUCT_ID>
<PRODUCT_DESC>Product 6</PRODUCT_DESC>
<GROUP_ID>2</GROUPD_ID>

</DATA>

I need to rearrange this data in hierarchical manner (there is more to
it...)

<DATA>
<PRODUCTS ID="0">

<PRODUCT>
    <PRODUCT_ID>1</PRODUCT_ID>
    <PRODUCT_DESC>Product 1</PRODUCT_DESC>
</PRODUCT>

<PRODUCT>
    <PRODUCT_ID>2</PRODUCT_ID>
    <PRODUCT_DESC>Product 2</PRODUCT_DESC>
</PRODUCT>

<PRODUCT>
    <PRODUCT_ID>3</PRODUCT_ID>
    <PRODUCT_DESC>Product 3</PRODUCT_DESC>
</PRODUCT>

</PRODUCTS>

<PRODUCTS ID="1">
...
...
</PRODUCTS>

...
...
</DATA>

I would like to keep a copy of all the PRODUCT nodes for Group "0" in every
other group ("1", "2" etc. Essentially, if someone asks for group "1", I
should be able to send GROUP 1 + GROUP 0 data together (and sorted) as one
set ) and each group sorted by PRODUCT_DESC.

The final output should be:

  
<DATA>
<PRODUCTS ID="0">
    <PRODUCT>
        <PRODUCT_ID>1</PRODUCT_ID>
        <PRODUCT_DESC>Product 1</PRODUCT_DESC>
    </PRODUCT>
    <PRODUCT>
        <PRODUCT_ID>2</PRODUCT_ID>
        <PRODUCT_DESC>Product 2</PRODUCT_DESC>
    </PRODUCT>
    <PRODUCT>
        <PRODUCT_ID>3</PRODUCT_ID>
        <PRODUCT_DESC>Product 3</PRODUCT_DESC>
    </PRODUCT>
</PRODUCTS>

<PRODUCTS ID="1">
    <PRODUCT>
        <PRODUCT_ID>1</PRODUCT_ID>
        <PRODUCT_DESC>Product 1</PRODUCT_DESC>
    </PRODUCT>
    <PRODUCT>
        <PRODUCT_ID>2</PRODUCT_ID>
        <PRODUCT_DESC>Product 2</PRODUCT_DESC>
    </PRODUCT>
    <PRODUCT>
        <PRODUCT_ID>3</PRODUCT_ID>
        <PRODUCT_DESC>Product 3</PRODUCT_DESC>
    </PRODUCT>
    <PRODUCT>
        <PRODUCT_ID>4</PRODUCT_ID>
        <PRODUCT_DESC>Product 4</PRODUCT_DESC>
    </PRODUCT>
    <PRODUCT>
        <PRODUCT_ID>5</PRODUCT_ID>
        <PRODUCT_DESC>Product 5</PRODUCT_DESC>
    </PRODUCT>
</PRODUCTS>

...
...
</DATA>

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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.