This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Problem to place data into a specific <TD>
- To: "'xsl-list at lists dot mulberrytech dot com'" <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] Problem to place data into a specific <TD>
- From: Roel Mertens <rmertens at inad dot nl>
- Date: Fri, 22 Dec 2000 09:14:38 +0100
- Cc: "'dnovatchev at yahoo dot com'" <dnovatchev at yahoo dot com>
- Reply-To: xsl-list at lists dot mulberrytech dot com
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@yahoo.com]
> Verzonden: donderdag 21 december 2000 17:27
> Aan: rmertens@inad.nl
> CC: xsl-list@lists.mulberrytech.com
> 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>
</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