Avatar billede js26 Nybegynder
18. marts 2001 - 12:57 Der er 4 kommentarer og
1 løsning

following-sibling

Hvis jeg gør følgende:
<xsl:apply-templates select=\"descendant::node()/child::LINK[@TMSP=$p-urltmsp]/following-sibling::LINK[1]\"/>

Kan jeg ikke være sikker på at der er noget LINK element der opfylder betingelserne, så jeg vil gerne teste på om template\'en bliver kaldt eller ikke, så jeg evt. kan kalde en anden template.
En metode kunne være at returnere en værdi fra templaten, som man kunne teste på, men det kan så vidt jeg kan se ikke lade sig gøre.
Er der nogen der har en løsning på mit problem?
Avatar billede lundholm Nybegynder
18. marts 2001 - 13:23 #1
Hejsa
Du kan, i den template hvor du gerne vil vide om der returneres noder eller ej, lave en choose sætning:
<xsl:choose>
<xsl:when test=\"descendant::node()/child::LINK[@TMSP=$p-urltmsp]/following-sibling::LINK[1]\">
Node fundet!
</xsl:when>
<xsl:otherwise>
Gør noget andet
</xsl:otherwise>
</xsl:choose>

iøvrigt bør du nok kigge nærmere på din XPath funktion, da den er meget besværlig og godt kan optimeres.

.//LINK[@TMSP=$p-urltmsp]/following-sibling::LINK

Dette vil altid gå fra aktuelle context, og for alle LINK noder, der har attributten TMSP lig med variablen $p-urltmsp, returnere den første sibling til denne (lidt lang sætning, men den skulle være der)! =o)

Du bør måske kigge efter Michael McKays XSLT reference fra Wrox. Guldbogen i XSLT/Xpath sammenhæng.
Avatar billede js26 Nybegynder
18. marts 2001 - 23:30 #2
Mange tak for svaret og det virker.
Jeg har også undladt predicatet [1]på LINK. Det virker også, men kan du så svare på hvorfor jeg ikke kan fjerne det på følgende:
<xsl:apply-templates select=\"FOLDER[@NAME=$p-folder]/child::LINK[1]\"/>
Hvis jeg fjerner det får jeg alle LINK elementer ud under den pågældende FOLDER.
:-´)
Avatar billede js26 Nybegynder
19. marts 2001 - 08:49 #3
Grunden til at det virkede uden predicatet [1] var mit XML, der ikke indeholdt nok testmateriale. Som jeg ser det skal man sætte [1] på for kun at få returneret 1.
Men ellers mange tak for hjælpen.
Avatar billede js26 Nybegynder
19. marts 2001 - 10:04 #4
Jeg har vist ikke mulighed for acceptere din kommentar før end du lægger det ind som et svar.
Avatar billede lundholm Nybegynder
19. marts 2001 - 11:04 #5
Ok, dette er et svar! :-)
Du kan forresten godt nøjes med kun at få værdien af den første sibling uden at skrive [1] explicit i din kode.

<xsl:value-of select=\"/Node/NodeValue\"/> returnerer altid kun 1 værdi i value-of statements, mens den ved test-sammenligninger i if-sætninger og lignende, altid returnerer alle noder der svarer til din forespørgsel!
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