15. juni 2005 - 22:36 Der er 6 kommentarer og
1 løsning

Group by eller Distinct i XSL(t)

Jeg har et problem med gruppering via XSL.
Jeg laver udtrækket således:
content/subcontents/[$name='playTime'][@type='collection']/item/attributes/attribute[@name='location']='1'
Dvs. jeg får kun de ud hvor location=1
Herefter skal jeg loope igennem på ../attribute[@name='startDate']
Nu skulle jeg så vise: <xsl:value-of select="."/>
problemet er så at datoerne kan være ens, så jeg må gruppere resultatet således at en dato kun vises én gang.
Ved at gruppere resultatet kan jeg linke til en anden side hvor jeg lister alle spilletider på den valgte dato.

Så jeg vil gerne have en løsning hvor XSL kun outputter datoen én gang.



XML:

        <content id="30189" type="Movie">
            <attributes>
                <attribute name="title">Elitepædagogen</attribute>
                <attribute name="original">The Pacifier</attribute>
                <attribute name="premiere">2005-06-03</attribute>
                <attribute name="censur">7</attribute>
                <attribute name="runtime">96</attribute>
                <attribute name="teaser">Så er der dømt stroppetur!</attribute>
                <attribute name="synops">Vin Diesel slår sig på sutteflasken</attribute>
                <attribute name="cast">Lauren Graham, Vin Diesel</attribute>
                <attribute name="instruction">Adam Shankman</attribute>
                <attribute name="genre">Komedie, Teenagefilm</attribute>
                <attribute name="pictureCopyright">UIP</attribute>
                <attribute name="picture1">http://www.LarsLand.dk/www.LarsLand.dk/Picture.aspx?id=24948&amp;width=120&amp;height=170</attribute>
                <attribute name="picture2">http://www.LarsLand.dk/www.LarsLand.dk/Picture.aspx?id=24453</attribute>
                <attribute name="top10PosDkThis">3</attribute>
                <attribute name="top10PosUsThis"/>
                <attribute name="top10PosDkPrev"/>
                <attribute name="top10PosUsPrev"/>
                <attribute name="top10CountDk">1</attribute>
                <attribute name="top10CountUs">7</attribute>
            </attributes>
            <bodypart>
                <text>Navy Seal-soldaten Shane Wolfe mener selv, han er i stand til at trodse enhver udfordring og påtage sige enhver opgave, uanset hvor farlig eller umulig den måtte synes.Lige indtil han prøver at babysitte!
                Shane har fået til opgave at beskytte fem børn af en snigmyrdet forsker, der arbejde på et tophemmeligt regeringsprojekt.
                Han må til en vis grad udskifte hele arsenalet af våddragter og våben, til fordel for bleer og juicebrikker, når han skal jonglere med to vanskelige bolde: En børneflok med krudt i enden og en udspekuleret fjende, der vil børnene til livs.
                Selvom Shane er professionel elitesoldat, må han snart sande, at han ikke anede hvad tough virkelig betød, før han blev alenefar til fem!</text>
            </bodypart>
            <subcontents>
                <subcontent name="playTime" type="collection">
                    <item>
                        <attributes>
                            <attribute name="location">1</attribute>
                            <attribute name="startDate">2005-06-12</attribute>
                            <attribute name="startTime">12:00</attribute>
                        </attributes>
                    </item>
                    <item>
                        <attributes>
                            <attribute name="location">1</attribute>
                            <attribute name="startDate">2005-06-12</attribute>
                            <attribute name="startTime">14:15</attribute>
                        </attributes>
                    </item>
                    <item>
                        <attributes>
                            <attribute name="location">2</attribute>
                            <attribute name="startDate">2005-06-12</attribute>
                            <attribute name="startTime">16:30</attribute>
                        </attributes>
                    </item>
                    <item>
                        <attributes>
                            <attribute name="location">2</attribute>
                            <attribute name="startDate">2005-06-12</attribute>
                            <attribute name="startTime">18:45</attribute>
                        </attributes>
                    </item>
                </subcontent>
            </subcontents>
        </content>
Avatar billede atoft Nybegynder
16. juni 2005 - 08:30 #1
Så prøver jeg da lige at besvare i den nye tråd nu også med linket :-)

http://www.jenitennison.com/xslt/grouping/index.html

Her findes nogle gode eksempler, på hvorledes grouping skal gøres.

Men glæd dig til xlst 2.0 der vil grouping være indbygget. :-)
16. juni 2005 - 09:26 #2
Hej atoft.

Ja jeg kender godt siden, men mtoden driller meget på den xml jeg har tilgængelig.
Jeg har dog selv gjort noget nu. Jeg transformerer xml'en således den bliver nemmere at arbejde med. og derfra kan jeg bruge den Muenchian Metode som beskrives på siden.

Jeg håbede måske på at nogle ville have 200 point for at lave en komplet løsning ;-)

Jeg er ikke så erfaren med exp.dk så jeg ved ikke hvad der skal til.

;-) Lars
Avatar billede pnd Nybegynder
16. juni 2005 - 10:01 #3
test
Avatar billede nielle Nybegynder
16. juni 2005 - 20:50 #4
Værsgod:

//content/subcontents/subcontent[@name='playTime'][@type='collection']/item[attributes/attribute[@name='location']='1'][not(attributes/attribute[@name='startDate'] = preceding-sibling::item/attributes/attribute[@name='startDate'])]/attributes/attribute[@name='startDate']

Forklaring:

1) Først leder vi ud langs stien:

//content/subcontents/subcontent[@name='playTime'][@type='collection']/item/attributes/attribute[@name='startDate']

Den giver os samtlige datoer, med dubletter og det hele og for samtlige lokationer.

2) Derefter indskrænker vi søgningen til kun at give os datoerne for lokation 1:

//content/subcontents/subcontent[@name='playTime'][@type='collection']/item[attributes/attribute[@name='location']='1']/attributes/attribute[@name='startDate']

Der er dog stadig mulighed for dubletter i datoerne.

3) Til sidst indskrænker vi søgningen til at udelade de datoer som allerede er blevet taget en gang før. Isoleret set ville denne se sådan her ud:

... /item[not(attributes/attribute[@name='startDate'] = preceding-sibling::item/attributes/attribute[@name='startDate'])]

- og indsat i det vi allerede har ser den sådan her ud:

//content/subcontents/subcontent[@name='playTime'][@type='collection']/item[attributes/attribute[@name='location']='1'][not(attributes/attribute[@name='startDate'] = preceding-sibling::item/attributes/attribute[@name='startDate'])]/attributes/attribute[@name='startDate']
Avatar billede nielle Nybegynder
16. juni 2005 - 21:39 #5
Ups, der var faktisk en lille fejl. Den skal se sådan her ud (splitet op i de logiske dele):

//content/subcontents/subcontent[@name='playTime'][@type='collection']/item

[attributes/attribute[@name='location']='1']

[not(
attributes/attribute[@name='startDate'] =
preceding-sibling::item/attributes[attribute[@name='location']='1']/attribute[@name='startDate']
)]

/attributes/attribute[@name='startDate']

- og her samlet i en:

//content/subcontents/subcontent[@name='playTime'][@type='collection']/item[attributes/attribute[@name='location']='1'][not(attributes/attribute[@name='startDate'] = preceding-sibling::item/attributes[attribute[@name='location']='1']/attribute[@name='startDate'])]/attributes/attribute[@name='startDate']
16. juni 2005 - 23:01 #6
Nielle du skal SVARE for at jeg kan godkende...
Avatar billede nielle Nybegynder
16. juni 2005 - 23:11 #7
Jeg svare først når folk beder om et svar ...

Svar :^)
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