xsl-list
[Top] [All Lists]

Grouping with keys or xpath

2002-10-04 03:11:47
Hello,
I have achived to group my xml input(see further down) to the desired output 
(see further down) 
with with xsl file (see further down) using xpath, but I have not manage to do 
the same with keys and the key function. The problem
is that the key is global for the whole document. I only want to group each 
articlerow in one variant at time.
Any hint/help would be appreciated

Best regards
 
Uffe



The xml file
<doc>
        <variant>
                <articlerow>
                        <nev_article_pos>1</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <articlerow>
                        <nev_article_pos>12</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <articlerow>
                        <nev_article_pos>12</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <parttitle>Hello World</parttitle>
                <articlerow>
                        <nev_article_pos>18</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <articlerow>
                        <nev_article_pos>19</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <articlerow>
                        <nev_article_pos>19</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
        </variant>
        <variant>
                <articlerow>
                        <nev_article_pos>4</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <parttitle>Hello World</parttitle>
                <articlerow>
                        <nev_article_pos>6</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <articlerow>
                        <nev_article_pos>4</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <articlerow>
                        <nev_article_pos>18</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <articlerow>
                        <nev_article_pos>19</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
                <articlerow>
                        <nev_article_pos>19</nev_article_pos>
                        <article>
                                <nev_article>009504145</nev_article>
                        </article>
                </articlerow>
        </variant>
</doc>

The output

<document>
        <partinfo>
                <partlist>
                        <partcallout>
                                <calloutitem>1</calloutitem>
                                <article>009504145</article>
                        </partcallout>
                        <partcallout>
                                <calloutitem>12</calloutitem>
                                <article>009504145</article>
                                <article>009504145</article>
                        </partcallout>
                        <title>Hello World</title>
                        <partcallout>
                                <calloutitem>18</calloutitem>
                                <article>009504145</article>
                        </partcallout>
                        <partcallout>
                                <calloutitem>19</calloutitem>
                                <article>009504145</article>
                                <article>009504145</article>
                        </partcallout>
                </partlist>
                <partlist>
                        <partcallout>
                                <calloutitem>4</calloutitem>
                                <article>009504145</article>
                                <article>009504145</article>
                        </partcallout>
                        <title>Hello World</title>
                        <partcallout>
                                <calloutitem>6</calloutitem>
                                <article>009504145</article>
                        </partcallout>
                        <partcallout>
                                <calloutitem>18</calloutitem>
                                <article>009504145</article>
                        </partcallout>
                        <partcallout>
                                <calloutitem>19</calloutitem>
                                <article>009504145</article>
                                <article>009504145</article>
                        </partcallout>
                </partlist>
        </partinfo>
</document>

The xsl file
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";  
xmlns:nevis="http://www.volvo.com/namespaces/processing"; xmlns:xlink = 
"http://www.w3.org/1999/xlink";>
        <xsl:strip-space elements="*"/>
        <xsl:template match="/doc">
                <document>                              
                        <partinfo>
                                <xsl:apply-templates select="variant"/>
                        </partinfo>     
                </document>
        </xsl:template>
                
        <xsl:template match="variant">
                <partlist>
                        <xsl:apply-templates/>
                </partlist>
        </xsl:template>
        
        <xsl:template match="articlerow">
                <xsl:for-each select="self::*[not(nev_article_pos = 
preceding-sibling::articlerow/nev_article_pos)]">
                        <partcallout>
                                <calloutitem><xsl:value-of 
select="nev_article_pos"/></calloutitem>
                                <xsl:apply-templates 
select="./..//article[current()/nev_article_pos =./../nev_article_pos]"/>
                        </partcallout>  
                </xsl:for-each>
        </xsl:template>
        
        <xsl:template match="parttitle">
                <title>
                        <xsl:value-of select="."/>
                </title>
        </xsl:template>
        
        <xsl:template match="article">
                <article><xsl:value-of select="nev_article"/></article>
        </xsl:template>
        
        <xsl:template match="text()"/>
</xsl:stylesheet>


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



<Prev in Thread] Current Thread [Next in Thread>