[xsl] single display of double elements but how to use generate-id

Subject: [xsl] single display of double elements but how to use generate-id
From: Heiko Specht <heiko@xxxxxxxxxx>
Date: Thu, 19 Dec 2002 17:02:15 +0100
Hello XSL-List Members,

while you all discuss strange (for me) things about verse extractions
i hope my question is trivial for you.

what i want to do is a javascript extract like this:

------------------------------------------
var listB = new DynamicOptionList("B","A");
listB.addOptions("PM2Q 6","Mac","Mac");
listB.addOptions("PageMaker 7.0","Windows","Windows","Mac","Mac");
listB.setDefaultOption("PM2Q 6","Mac");
listB.setDefaultOption("PageMaker 7.0","Mac");
------------------------------------------

done with this xsl (works):
------------------------------------------

<xsl:text>var listB = new DynamicOptionList("B","A");</xsl:text>
<xsl:for-each select="xalan:nodeset($smallversion)/vers">
            <xsl:text>listB.addOptions("</xsl:text>
                <xsl:value-of select="." /><xsl:text>"</xsl:text>
                <xsl:variable name="thisname" select="."/>
                
                <xsl:variable name="systemsForEach">
                <xsl:for-each select="$articles[contains(articleName, $thisname)]">
                        <sfffe><xsl:text>,"</xsl:text><xsl:value-of select="articleenv/name"/>","<xsl:value-of select="articleenv/name"/><xsl:text>"</xsl:text></sfffe>
                </xsl:for-each>
                </xsl:variable>
                <xsl:variable name="newnode" select="xalan:nodeset($systemsForEach)/sfffe"/>
                <xsl:for-each select="$newnode">
                        <xsl:if test="generate-id(.) =  generate-id($newnode[.=current()])">
                                <xsl:value-of select="."/>
                        </xsl:if>
                </xsl:for-each>
                                
                <xsl:text>);</xsl:text>
</xsl:for-each>
<xsl:for-each select="xalan:nodeset($smallversion)/vers">
                <xsl:text>listB.setDefaultOption("</xsl:text>
                <xsl:value-of select="." />
                <xsl:text>",</xsl:text>
                <xsl:for-each select="xalan:nodeset($smallsys)/sys">
                        <xsl:if test="position()='1'">
                                <xsl:text>"</xsl:text><xsl:value-of select="."/><xsl:text>"</xsl:text>
                        </xsl:if>
                </xsl:for-each>
            <xsl:text>);</xsl:text>
</xsl:for-each>
----------------------------------------


but the next part drives me crazy.

the output should be like this without doubles of languages:

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

var listC = new DynamicOptionList("C","A","B");
listC.addOptions("PM2Q 6|Mac","english/anglais","EN");
listC.addOptions("PageMaker 7.0|Windows","german/allemand","DE","german/allemand","DE","english/anglais","EN");
listC.addOptions("PageMaker 7.0|Mac","german/allemand","DE","german/allemand","DE");
                  ^firstselect    ^secondselect                    ^option     ^value
-----------------------------------------

what should the script do: when someone choose an option in a select
box the othe box should be filled automatically with new options
without reloading. (the jscript works fine allready)
but as you can see, the languages are displayed twice.

here is the piece of xsl that makes the stuff:
i have marked the criteric point with an command.

any one got an idea ?

at the bottom you can find the the xml i work with !

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

<xsl:text>var listC = new DynamicOptionList("C","A","B");</xsl:text>
<xsl:for-each select="xalan:nodeset($smallversion)/vers">
            <xsl:variable name="thisname" select="."/>
                <xsl:variable name="systemsForEach">
                <xsl:for-each select="$articles[contains(articleName, $thisname)]">
                        <xsl:variable name="envname" select="articleenv/name"/>
                        <sofar>
                                <xsl:text>listC.addOptions(</xsl:text>
                                <xsl:text>"</xsl:text>
                                <xsl:value-of select="$thisname"/>|<xsl:value-of select="$envname"/>
                                <xsl:text>"</xsl:text>
                                <xsl:for-each select="$articles[contains(articleName, $thisname)]">
                                        <xsl:if test="contains(articleenv/name,$envname)">
                                        
                                                <!-- at this point i need to display each language only once -->
                                                <xsl:text>,"</xsl:text><xsl:value-of select="articlelanguage/name"/><xsl:text>","</xsl:text><xsl:value-of select="articlelanguage/shortname"/><xsl:text>"</xsl:text>
                                                <!-- end language display -->
                                        
                                        </xsl:if>
                                </xsl:for-each>
                                <xsl:text>);</xsl:text>
                        </sofar>
                </xsl:for-each>
                </xsl:variable>
                <xsl:variable name="newnode" select="xalan:nodeset($systemsForEach)/sofar"/>
                <xsl:for-each select="$newnode">
                        <xsl:if test="generate-id(.) =  generate-id($newnode[.=current()])">
                                <xsl:value-of select="."/>
                        </xsl:if>
                </xsl:for-each>
</xsl:for-each>


-- 
Best regards,
 Heiko                          mailto:heiko@xxxxxxxxxx


<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="neutest.xsl" encoding="UTF-8"?>
<page key="softline.de.product_show"><article-list><article><article_id>21652</article_id><articleName>PM2Q 6 MAC en.</articleName><articleno>21652</articleno><archived>0</archived><weight>0.15000000596046448</weight><deliverable>1</deliverable>
<reservationstock>0.0</reservationstock><articleenv><articleenv_id>2</articleenv_id><name>Mac</name><shortname>M</shortname></articleenv><articlelanguage><articlelanguage_id>3</articlelanguage_id><name>english/anglais</name><shortname>EN</shortname></articlelanguage>
<articleclass1_id>0</articleclass1_id><articleclass2_id>0</articleclass2_id><articleclass3_id>0</articleclass3_id><articleclass4_id>0</articleclass4_id><expiration>1</expiration><type><type_id>1</type_id><pricecalculator_id>1</pricecalculator_id><name>standard</name>
<deliverable>1</deliverable></type><retailprice><retailprice_id>33914</retailprice_id><article_id>21652</article_id><pricetype_id>100</pricetype_id><client_id>1</client_id><price>145.69</price><bruttoprice>169.0</bruttoprice><currency><currency_id>114</currency_id><name>EURO</name>
<shortname>EUR</shortname><exchange>1.0</exchange><isoname>EUR</isoname><isocode>978</isocode></currency><vatrate>16.0</vatrate></retailprice></article><article><article_id>957550</article_id><articleName>PageMaker 7.0 WIN de.</articleName><articleno>PMA00003</articleno><archived>0</archived>
<weight>1.2999999523162842</weight><deliverable>1</deliverable><reservationstock>0.0</reservationstock><articleenv><articleenv_id>3</articleenv_id><name>Windows</name><shortname>W</shortname></articleenv><articlelanguage><articlelanguage_id>5</articlelanguage_id><name>german/allemand</name>
<shortname>DE</shortname></articlelanguage><articleclass1_id>0</articleclass1_id><articleclass2_id>0</articleclass2_id><articleclass3_id>0</articleclass3_id><articleclass4_id>0</articleclass4_id><expiration>0</expiration><type><type_id>1</type_id><pricecalculator_id>1</pricecalculator_id>
<name>standard</name><deliverable>1</deliverable></type><retailprice><retailprice_id>199698</retailprice_id><article_id>957550</article_id><pricetype_id>100</pricetype_id><client_id>1</client_id><price>818.1</price><bruttoprice>949.0</bruttoprice><currency><currency_id>114</currency_id>
<name>EURO</name><shortname>EUR</shortname><exchange>1.0</exchange><isoname>EUR</isoname><isocode>978</isocode></currency><vatrate>16.0</vatrate></retailprice></article><article><article_id>957551</article_id><articleName>PageMaker 7.0 MAC de.</articleName><articleno>PMA00004</articleno>
<archived>0</archived><weight>1.2999999523162842</weight><deliverable>1</deliverable><reservationstock>0.0</reservationstock><articleenv><articleenv_id>2</articleenv_id><name>Mac</name><shortname>M</shortname></articleenv><articlelanguage><articlelanguage_id>5</articlelanguage_id>
<name>german/allemand</name><shortname>DE</shortname></articlelanguage><articleclass1_id>0</articleclass1_id><articleclass2_id>0</articleclass2_id><articleclass3_id>0</articleclass3_id><articleclass4_id>0</articleclass4_id><expiration>0</expiration><type><type_id>1</type_id>
<pricecalculator_id>1</pricecalculator_id><name>standard</name><deliverable>1</deliverable></type><retailprice><retailprice_id>199703</retailprice_id><article_id>957551</article_id><pricetype_id>100</pricetype_id><client_id>1</client_id><price>818.1</price><bruttoprice>949.0</bruttoprice>
<currency><currency_id>114</currency_id><name>EURO</name><shortname>EUR</shortname><exchange>1.0</exchange><isoname>EUR</isoname><isocode>978</isocode></currency><vatrate>16.0</vatrate></retailprice></article><article><article_id>957552</article_id>
<articleName>Update auf PageMaker 7.0 MAC de. von x.x</articleName><articleno>PMA00005</articleno><archived>0</archived><weight>1.2000000476837158</weight><deliverable>1</deliverable><reservationstock>0.0</reservationstock><articleenv><articleenv_id>2</articleenv_id><name>Mac</name>
<shortname>M</shortname></articleenv><articlelanguage><articlelanguage_id>5</articlelanguage_id><name>german/allemand</name><shortname>DE</shortname></articlelanguage><articleclass1_id>3</articleclass1_id><articleclass2_id>0</articleclass2_id><articleclass3_id>0</articleclass3_id>
<articleclass4_id>0</articleclass4_id><expiration>0</expiration><type><type_id>1</type_id><pricecalculator_id>1</pricecalculator_id><name>standard</name><deliverable>1</deliverable></type><retailprice><retailprice_id>199708</retailprice_id><article_id>957552</article_id>
<pricetype_id>100</pricetype_id><client_id>1</client_id><price>128.45</price><bruttoprice>149.0</bruttoprice><currency><currency_id>114</currency_id><name>EURO</name><shortname>EUR</shortname><exchange>1.0</exchange><isoname>EUR</isoname><isocode>978</isocode></currency>
<vatrate>16.0</vatrate></retailprice></article><article><article_id>957553</article_id><articleName>Update auf PageMaker 7.0 WIN de. von x.x</articleName><articleno>PMA00006</articleno><archived>0</archived><weight>1.2000000476837158</weight><deliverable>1</deliverable>
<reservationstock>0.0</reservationstock><articleenv><articleenv_id>3</articleenv_id><name>Windows</name><shortname>W</shortname></articleenv><articlelanguage><articlelanguage_id>5</articlelanguage_id><name>german/allemand</name><shortname>DE</shortname></articlelanguage>
<articleclass1_id>0</articleclass1_id><articleclass2_id>0</articleclass2_id><articleclass3_id>0</articleclass3_id><articleclass4_id>0</articleclass4_id><expiration>0</expiration><type><type_id>1</type_id><pricecalculator_id>1</pricecalculator_id><name>standard</name><deliverable>1</deliverable>
</type><retailprice><retailprice_id>199713</retailprice_id><article_id>957553</article_id><pricetype_id>100</pricetype_id><client_id>1</client_id><price>128.45</price><bruttoprice>149.0</bruttoprice><currency><currency_id>114</currency_id><name>EURO</name><shortname>EUR</shortname>
<exchange>1.0</exchange><isoname>EUR</isoname><isocode>978</isocode></currency><vatrate>16.0</vatrate></retailprice></article><article><article_id>960563</article_id><articleName>Update auf PageMaker 7.0 WIN en. von x.x</articleName><articleno>PMA00012</articleno>
<archived>0</archived><weight>1.2000000476837158</weight><deliverable>1</deliverable><reservationstock>0.0</reservationstock><articleenv><articleenv_id>3</articleenv_id><name>Windows</name><shortname>W</shortname></articleenv><articlelanguage><articlelanguage_id>3</articlelanguage_id>
<name>english/anglais</name><shortname>EN</shortname></articlelanguage><articleclass1_id>3</articleclass1_id><articleclass2_id>0</articleclass2_id><articleclass3_id>0</articleclass3_id><articleclass4_id>0</articleclass4_id><expiration>0</expiration><type><type_id>1</type_id>
<pricecalculator_id>1</pricecalculator_id><name>standard</name><deliverable>1</deliverable></type><retailprice><retailprice_id>221191</retailprice_id><article_id>960563</article_id><pricetype_id>100</pricetype_id><client_id>1</client_id><price>128.45</price><bruttoprice>149.0</bruttoprice>
<currency><currency_id>114</currency_id><name>EURO</name><shortname>EUR</shortname><exchange>1.0</exchange><isoname>EUR</isoname><isocode>978</isocode></currency><vatrate>16.0</vatrate></retailprice></article></article-list><cart><priceSubTotal>0.00</priceSubTotal><VAT>0.00</VAT>
<priceTotal>0.00</priceTotal><sumTotal>0.00</sumTotal><sumVAT>0.00</sumVAT></cart><usertracking><client_id>1</client_id><document>product_show_11567</document></usertracking></page> 


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


Current Thread