RE: [xsl] Problem to place data into a specific <TD>

Subject: RE: [xsl] Problem to place data into a specific <TD>
From: Roel Mertens <rmertens@xxxxxxx>
Date: Fri, 22 Dec 2000 09:14:38 +0100
hello Dimitre,

Thanks for your reply !
I've got one big problem I thin.... my clients all use IE5 and I can;'t
expect that they all install msxml3. So, I have to fix it with msmxl2, and
therefor I can't use something like <xsl:variable> and some other thinks.

Do you think there is a solution, something with javascript in it, or ?

Roel


> -----Oorspronkelijk bericht-----
> Van: Dimitre Novatchev [mailto:dnovatchev@xxxxxxxxx]
> Verzonden: donderdag 21 december 2000 17:27
> Aan: rmertens@xxxxxxx
> CC: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Onderwerp: Re: [xsl] Problem to place data into a specific <TD> 
> 
> 
> Hi Roel,
> 
> Sometimes this summer I had a similar problem.
> 
> Given the following xml document(pivot.xml):
> ------------------------------------------
> <root>
> 	<data>
> 		<item id='1' name='age' value='25' />
> 		<item id='2' name='age' value='27' />
> 		<item id='1' name='cool' value='yes' />
> 		<item id='2' name='cool' value='no' />
> 	</data>
> </root>
> 
> The following output had to be produced:
> ---------------------------------------
> id,age,cool
> 1,25,yes
> 2,27,no
> 
> Below is the stylesheet that specifies this transformation. This is
> very similar to your problem and I hope it can be of some help to you.
> 
> Dimitre.
> 
> The stylesheet (pivot.xsl):
> ---------------------------
> <xsl:stylesheet version="1.0"
> 	xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> 	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
> 	>
> 
> 	<xsl:output method="text"/>
> 
> 	<xsl:variable name="Root" select="/"/> 
> 	
> 	<!-- Obtain all different "name"s -->
> 	<xsl:variable name="sortedNames">
> 		<xsl:for-each select="/root/data/item">
> 			<xsl:sort select="@name"/>
> 				<xsl:element name="name">
> 					<xsl:value-of select="@name"/>
> 				</xsl:element>
> 		</xsl:for-each>
> 	</xsl:variable>
> 	
> 	<xsl:variable name="uniqueNames">
> 		<xsl:for-each 
> select="msxsl:node-set($sortedNames)/name[position()=1 
> or . != preceding-sibling::name[1]]">
> 			<xsl:element name="name">
> 				<xsl:value-of select="."/>
> 			</xsl:element>
> 		</xsl:for-each>
> 	</xsl:variable>
> 	
> 	<!-- Obtain all different "id"s -->
> 	<xsl:variable name="sortedIds">
> 		<xsl:for-each select="/root/data/item">
> 			<xsl:sort select="@id"/>
> 				<xsl:element name="id">
> 					<xsl:value-of select="@id"/>
> 				</xsl:element>
> 		</xsl:for-each>
> 	</xsl:variable>
> 	
> 	<xsl:variable name="uniqueIds">
> 		<xsl:for-each 
> select="msxsl:node-set($sortedIds)/id[position()=1 
> or . != preceding-sibling::id[1]]">
> 			<xsl:element name="id">
> 				<xsl:value-of select="."/>
> 			</xsl:element>
> 		</xsl:for-each>
> 	</xsl:variable>
> 	
> 	
>  
> 
> <xsl:template match="/">
> 	<!-- Output the "title" line -->
> 	<xsl:text>id,</xsl:text>
> 	<xsl:for-each select="msxsl:node-set($uniqueNames)/*">
> 		<xsl:value-of select="."/>
> 		<xsl:if test="position() != last()">
> 			<xsl:text>,</xsl:text>
> 		</xsl:if>
> 	</xsl:for-each>
> 	
> 	<!-- Output every "data" line -->
> 	<xsl:for-each select="msxsl:node-set($uniqueIds)/id">
> 		<xsl:variable name="thisId" select="."/>
> 		
> 		<!-- Output "NL" + "id" -->
> 		<xsl:text>&#xA;</xsl:text>
> 		<xsl:value-of select="."/>
> 		<xsl:text>,</xsl:text>
> 		
> 		<!-- Output the corresponding "value" for every "id" -->
> 		<xsl:for-each 
> select="msxsl:node-set($uniqueNames)/name">
> 			<xsl:variable name="thisName" select="."/>
> 			<xsl:value-of select="$Root/root/data/item
> [@id=$thisId][@name=$thisName][1]/@value"/>
> 			<xsl:if test="position() != last()">
> 				<xsl:text>,</xsl:text>
> 			</xsl:if>
> 		</xsl:for-each>
> 	</xsl:for-each>
> 	
> </xsl:template>
> </xsl:stylesheet>
> 
> 
> Roel Mertens wrote:
> 
> I have the following problem.
> Here my XML and my wanted output:
> 
> 
> XML:
>  
> <Root>
> <Article></Article>
> <ID>1</ID>
> <code type="A">1</code>
> <code type="B">2</code>
> <code type="C">3</code>
> <Article></Article>
> <ID>2</ID>
> <code type="A">1</code>
> <code type="C">3</code>
> </Root>
> 
> I want this as output (with xsl)
> 
>         A    B    C
> 1      1     2    3
> 2      1           3
> 
> with a for-each the problem is the last code is placed under B like:
> 
>         A    B    C
> 1      1     2    3
> 2      1     3
> 
> What can be a solution ??
> The code type is vaiable, I don't know whatr it is when I get the XML.
> So it can also be E F G or something
> 
> 
> 
> 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Shopping - Thousands of Stores. Millions of Products.
> http://shopping.yahoo.com/
> 
>  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