Avatar billede ninkanina Nybegynder
11. april 2003 - 10:40 Der er 14 kommentarer og
1 løsning

Hvordan bruger man AND i <xsl:when test="...">?

Problem:

Jeg skal udskrive "Hele Verden", hvis alle kontinter er repræsenteret i min XML fil, i stedet for at udskrive hvert kontinent.

Eks.:
<xsl:for-each select="location">
<xsl:choose>
<xsl:when test="location_continent_id='1' AND location_continent_id='2' AND osv.">
  <xsl:text>Hele Verden</xsl:text>
</xsl:when>
<xsl:otherwise>
.
. (det har jeg styr på)
.
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>

Håber det er forklaring nok.
Avatar billede nil.dk Nybegynder
11. april 2003 - 10:43 #1
AND burde være fint...
Avatar billede Slettet bruger
11. april 2003 - 11:34 #2
Når du bruger AND på den måde får du aldrig en match, fordi du spørger på om noget er lig med '1' - men samtidig skal det være lig med '2' - that's not gonna happen :-)

Hvis du vil teste om dit <location> ser sådan ud:
<location>
  <location_continent_id>1</location_continent_id>
  <location_continent_id>2</location_continent_id>
</location>

- skal du gøre sådan: <xsl:when test=".[location_continent_id = '1'][location_continent_id = '2']">

Er det attributter skal du gøre sådan: <xsl:when test=".[@location_continent_id = '1'][@location_continent_id = '2']">

/CS
Avatar billede ninkanina Nybegynder
13. april 2003 - 22:18 #3
CS, det virker ikke. Jeg får flg. fejl når jeg compiler filen:

Code: 0x80004005
Expected token 'eof' found '['.

.-->[<--location_continent_id = '1'][location_continet_id = '2']

Hvad gør jeg forkert? Jeg har gjort præcist som du skrev...
Avatar billede Slettet bruger
13. april 2003 - 23:21 #4
Hvilket XSLT namespace bruger du?

Dvs.: - linjen med "xsl:stylesheet" - bruger den:

a. "http://www.w3.org/1999/XSL/Transform",
eller
b. "http://www.w3.org/TR/WD-xsl" ?
Avatar billede ninkanina Nybegynder
14. april 2003 - 08:08 #5
Jeg bruger denne:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Avatar billede ninkanina Nybegynder
22. april 2003 - 11:32 #6
Hey CS, har du noget til mig, nu hvor jeg har svaret på dit spørgsmål???

/NA
Avatar billede Slettet bruger
22. april 2003 - 11:58 #7
Sorry - ja det har jeg: erstat "." med "current()" - altså:

<xsl:when test="current()[loc.... osv."

/CS
Avatar billede ninkanina Nybegynder
22. april 2003 - 12:47 #8
Nu kan jeg compile filen, men jeg får ikke vist noget som helst, hverken når jeg har alle kontinenter i min xml fil og ej heller når jeg kun har et par stykker. Med andre ord, den bruger ikke min otherwise... Har du nogle forslag?

/NA
Avatar billede Slettet bruger
22. april 2003 - 12:50 #9
Svært at sige - en URL ville hjælpe, evt. en kort opridsning af strukturen i XML filen...

/CS
Avatar billede ninkanina Nybegynder
22. april 2003 - 13:03 #10
Du får lige et udpluk af xml filen med alle kontinenter samt et udpluk af xsl filen længere nede:

XML:
<test>
    <location>
        <location_continent_id>1</location_continent_id>
        <location_continent_name>Østasien</location_continent_name>
    </location>
    <location>
        <location_continent_id>2</location_continent_id>
        <location_continent_name>Europa</location_continent_name>
    </location>
    <location>
        <location_continent_id>3</location_continent_id>
        <location_continent_name>Afrika</location_continent_name>
    </location>
    <location>
        <location_continent_id>4</location_continent_id>
        <location_continent_name>Sydamerika</location_continent_name>
    </location>
    <location>
        <location_continent_id>5</location_continent_id>
        <location_continent_name>Australien/Stillehavet</location_continent_name>
    </location>
    <location>
        <location_continent_id>6</location_continent_id>
        <location_continent_name>Nordamerika</location_continent_name>
    </location>
    <location>
        <location_continent_id>7</location_continent_id>
        <location_continent_name>Mellemøsten</location_continent_name>
    </location>
    <location>
        <location_continent_id>8</location_continent_id>
        <location_continent_name>Sydøstasien</location_continent_name>
    </location>
</test>

XSL:
<table border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td width="599" valign="top">
            <xsl:for-each select="test">
                <xsl:choose>
                    <xsl:when test="current()[location/location_continent_id = '1'][location/location_continent_id = '2'][location/location_continent_id = '3'][location/location_continent_id = '4'][location/location_continent_id = '5'][location/location_continent_id = '6'][location/location_continent_id = '7'][location/location_continent_id = '8']">
                        <div class="height"><br></br></div>
                        <p class="text">
                            Hele Verden
                        </p>
                    </xsl:when>
                    <xsl:otherwise>
                        <div class="height"><br></br></div>
                        <p class="text">
                            <xsl:value-of select="location_continent_name"/>
                                <xsl:choose>
                                    <xsl:when test="(location_country_name)">
                                        - <xsl:value-of select="location_country_name"/>
                                    </xsl:when>
                                </xsl:choose>
                                <xsl:choose>
                                    <xsl:when test="(location_district1_name)">
                                        - <xsl:value-of select="location_district1_name"/>
                                    </xsl:when>
                                </xsl:choose>
                                <xsl:choose>
                                    <xsl:when test="(location_district2_name)">
                                        - <xsl:value-of select="location_district2_name"/>
                                    </xsl:when>
                                </xsl:choose>
                        </p>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:for-each>
        </td>
    </tr>
</table>

Håber det forklarer tingene bedre og at du kan hjælpe mig.

/NA
Avatar billede Slettet bruger
22. april 2003 - 13:26 #11
Yep - dér ligger hunden :-)

(Går ud fra dit XSL ligger i rod-templaten - "/")

Umiddelbart ser det ud som det du vil kan klares ved at sætte din for-each til at select'e "test/location", og fjerne "location/" fra (alle) dine tests...

/CS
Avatar billede ninkanina Nybegynder
22. april 2003 - 13:37 #12
Det giver samme resultat :o(

Jeg har ikke styr på om mit XSL ligger i rod-templaten - "/", da jeg ikke er helt klar over hvad det betyder. Jeg er ikke hardcore XSL-haj eller kodehaj i det hele taget ;o)

For resten: Det tag der hedder <test> indeholder mange flere sub tags end <location>. Du har kun fået et lille udsnit af koden...

/NA
Avatar billede ninkanina Nybegynder
28. april 2003 - 12:13 #13
Hey CS - har du glemt mig? Jeg er ikke kommet videre og aner ikke mine levende råd. Jeg får stadig ikke vist noget som helst, hverken når jeg har alle kontinenter i min xml fil og ej heller når jeg kun har et par stykker.
Håber du har et nyt kort i ærmet til mig.

/NS
Avatar billede Slettet bruger
28. april 2003 - 23:32 #14
Du bliver nok nødt til at lægge begge filer online, så jeg kan checke dem efter. Alternativt kan du sende dem direkte til mig på greystate[at]steinmeier[dot]dk, hvis du ikke vil have andre kigger med...

/CS
Avatar billede ninkanina Nybegynder
05. maj 2003 - 12:11 #15
Tak for hjælpen - det virker nu :o)
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