Avatar billede nickyc Nybegynder
04. september 2008 - 13:06 Der er 8 kommentarer og
1 løsning

Udskriver samme kommune flere gange?

Har noget XSLT der spytter kommuner ud alt efter hvilken region du er fra... Hvis jeg så har 3 firmaer der ligger i samme kommune, udskriver den så samme kommunes navn 3 gange i min select, men vil kun have den til at udskrive kommunen 1 gang i select... Hvordan laver jeg lige det her:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" encoding="UTF-8"/>
    <xsl:key name="regions-by-region" match="Field[@Name = 'Region']" use="text()" />
    <xsl:key name="municipality-by-region" match="Field[@Name = 'Municipality']" use="../Field[@Name='Region']/text()" />
    <xsl:key name="reseller-by-municipality" match="Fields" use="Field[@Name='Municipality']/text()" />
   
    <xsl:variable name="editionId"><xsl:value-of select="//EditionId" /></xsl:variable>
   
    <xsl:variable name="selectedRegion"><xsl:value-of select="//RequestContent/QueryString/Entry[@Name='region']" /></xsl:variable>
    <xsl:variable name="selectedMunicipality"><xsl:value-of select="//RequestContent/QueryString/Entry[@Name='municipality']" /></xsl:variable>
   
    <xsl:template match="Documents">
        <div id="retailerform">
    <!--selectedRegion:<xsl:value-of select="$selectedRegion"/><br />selectedMunicipality:<xsl:value-of select="$selectedMunicipality"/><br />-->
        <form action="" method="get" id="resellerSelector">
            <span id="regionSelector">
                <select name="region" onchange="if($('municipality')) $('municipality').selectedIndex = -1 ;$('resellerSelector').submit()">
                    <xsl:if test="$editionId = '1'">
                        <option>Vælg region:</option>
                    </xsl:if>
                    <xsl:if test="$editionId = '2'">
                        <option>Välj län:</option>
                    </xsl:if>
                    <xsl:if test="$editionId = '3'">
                        <option>Velg fylke:</option>
                    </xsl:if>
                    <xsl:if test="$editionId = '4'">
                        <option>Choose region:</option>
                    </xsl:if>
                    <xsl:for-each select="Document/DocumentEdition/Fields/Field[@Name='Region'][count(. | key('regions-by-region', text())[1]) = 1]">
                        <option><xsl:if test="//RequestContent/QueryString/Entry[@Name='region'] = text()"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if><xsl:value-of select="text()" /></option>   
                    </xsl:for-each>
                </select>
            </span>

        <xsl:if test="$selectedRegion != ''">
            <span id="municipalitySelector" style="padding-left: 100px;">
                <select name="municipality" id="municipality" onchange="$('resellerSelector').submit()">
                    <xsl:if test="$editionId = '1'">
                        <option>Vælg kommune:</option>
                    </xsl:if>
                    <xsl:if test="$editionId = '2'">
                        <option>Välj kommun:</option>
                    </xsl:if>
                    <xsl:if test="$editionId = '3'">
                        <option>Velg kommune:</option>
                    </xsl:if>
                    <xsl:if test="$editionId = '4'">
                        <option>Choose municipality:</option>
                    </xsl:if>
                    <!--xsl:for-each select="Document/DocumentEdition/Fields/Field[@Name='Municipality'][count(. | key('municipality-by-region', $selectedRegion)[1]) = 1]"-->
                    <xsl:for-each select="key('municipality-by-region', $selectedRegion)">
                        <option><xsl:if test="//RequestContent/QueryString/Entry[@Name='municipality'] = text()"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if><xsl:value-of select="." /></option>   
                    </xsl:for-each>
                </select>
            </span>
            <div class="reset">&#160;</div>
        </xsl:if>
        </form>
        </div>
        <br />
        <br />
       
        <xsl:for-each select="key('reseller-by-municipality', $selectedMunicipality)">
        <xsl:if test="$selectedMunicipality != ''">
        <div class="wrapRegion">
            <xsl:if test="Field[@Name = 'Name'] !=''">
                <strong><xsl:value-of select="Field[@Name='Name']" /></strong><br />
            </xsl:if>
            <xsl:if test="Field[@Name = 'StreetandNumber'] !=''">
                <xsl:value-of select="Field[@Name='StreetandNumber']" /><br />
            </xsl:if>
            <xsl:if test="not(Field[@Name='City'] = '')">
                <xsl:value-of select="Field[@Name='Postal']" />&#160;<xsl:value-of select="Field[@Name='City']" />
            </xsl:if><br />
            <xsl:if test="Field[@Name = 'Phone'] !=''">
                Tel: <xsl:value-of select="Field[@Name='Phone']" disable-output-escaping="yes" /><br />
            </xsl:if>
            <xsl:if test="Field[@Name = 'Fax'] !=''">
                Fax: <xsl:value-of select="Field[@Name='Fax']" disable-output-escaping="yes" /><br />
            </xsl:if>
            <xsl:if test="Field[@Name = 'Email'] !=''">
                <a><xsl:attribute name="href">mailto:<xsl:value-of select="Field[@Name='Email']" disable-output-escaping="yes" /></xsl:attribute><xsl:value-of select="Field[@Name='Email']" disable-output-escaping="yes" /></a><br />
            </xsl:if>
            <xsl:if test="Field[@Name = 'Website01'] !=''">
                <xsl:value-of disable-output-escaping="yes" select="Field[@Name='Website01']/Output"/><br />
            </xsl:if>
        </div>
        <hr />
        </xsl:if>
        </xsl:for-each>
       
  </xsl:template>
  <xsl:template match="/Module">
    <xsl:apply-templates select="//Row"/>
  </xsl:template>
  <xsl:template match="Row">
    <xsl:apply-templates select="Cell"/>
  </xsl:template>
  <xsl:template match="Cell">
    <xsl:value-of disable-output-escaping="yes" select="ContentArea"/>
  </xsl:template>
  <xsl:template match="RequestContent"/>
Avatar billede jokkejensen Novice
04. september 2008 - 15:54 #1
http://aspalliance.com/34 <- Destinct values gennem xslt.

/JJ
Avatar billede nickyc Nybegynder
05. september 2008 - 11:16 #2
Kanon, tak for det
Avatar billede jokkejensen Novice
05. september 2008 - 14:15 #3
Selv tak !
Avatar billede jespertverskov Nybegynder
08. september 2008 - 13:54 #4
distinct-values() er en XSLT 2.0 function og kan ikke bruges i XSLT 1.0.

Du er nødt til at bruge "preceding::" axis. Se et eksempel i min artikel, "13 XPath axes": http://www.xmlplease.com/axis#s3.
Avatar billede jokkejensen Novice
09. september 2008 - 14:07 #5
øhhh ok.. men lidt flyvsk kommentar, når man lige læser mit link.

distinct-values() har forresten ikke noget med XSLT 2.0 at gøre, men med xPath 2.0 der er en væsentlig forskel.. kig selv i fn: eller op: ns for xPath 2.0.
Avatar billede jokkejensen Novice
09. september 2008 - 14:10 #6
Her lidt læsning til læreren :)

Xpath 2.0 (xQuery) :
http://www.w3.org/TR/xpath-functions/

Xslt 2.0
http://www.w3.org/TR/xslt20/
Avatar billede jespertverskov Nybegynder
09. september 2008 - 16:01 #7
Det er rigtigt at mit første svar er overflødigt, hvis jeg havde givet mig tid til at følge ovenstående link http://aspalliance.com/34. Har måske en lille smule at gøre med, at linknavnet ikke indikerer noget som helst i retning af XSLT/XPath.

Og never mind, to stort set identiske svar kan da kun være til fordel for spørgeren.

Mit eget link linkede desværre ikke præcist,fordi punktummet ved et uheld ikke blev en del af linknavnet.

Selvfølgelig er distinct-values()en XPath funktion og dermed integreret i XSLT, der bruger XPath som "søgesprog". I det daglige er der ingen, der i XSLT skelner mellem om funktioner tilhører XPath eller XSLT. Din egen formulering "Destinct values gennem xslt" er vel udtryk for det samme.
Avatar billede jokkejensen Novice
10. september 2008 - 10:45 #8
Hvis du mener at fordi xpath er integreret i xslt og at xslt 2.0 kommer med xpath 2.0 og xslt 1.0 ikke kan med xpath 2.0, så kan du have ret, og jeg tror vi mener det samme. Men jeg syntes da det er vigtigt at understrege at man bestemt også bruger xpath andre steder når man behandler xml - end lige xslt.

Jeg skelner som du siger heller ikke mellem dem i dagligdagen. Men det er 2 uafhængige teknologier.
Avatar billede jokkejensen Novice
10. september 2008 - 10:46 #9
... ikke kun xml.. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester