Avatar billede js26 Nybegynder
08. januar 2004 - 12:46 Der er 11 kommentarer og
1 løsning

test på første gang

Jeg vil gerne i en template udføre en handling første gang man er der og en anden handling de efterfølgende gange.
Hvordan gør man det?
Avatar billede atoft Nybegynder
08. januar 2004 - 12:50 #1
jeg er ikke helt sikker på din situation.

Men med en <xsl:if test="position() = 1" > er de kun den første node som ankommer i "flokken" som vil opfylde denne betingelse, er det det du ville opnå?
Avatar billede js26 Nybegynder
08. januar 2004 - 13:07 #2
Hej atoft
Her er mit xslt. Der hvor jeg udskriver position vil jeg haldrig få position() = 1.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" omit-xml-declaration="no" indent="yes" doctype-public="-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" doctype-system="http://java.sun.com/dtd/web-app_2_3.dtd" />

        <xsl:template match="/">
            <xsl:apply-templates select="web-app"></xsl:apply-templates>
           
        </xsl:template>
       
        <xsl:template match="web-app">
            <xsl:apply-templates select="./* | ./comment()"></xsl:apply-templates>
        </xsl:template>
       
        <xsl:template match="web-app/* | comment()">
            <xsl:copy-of select="."></xsl:copy-of>
        </xsl:template>
       
        <xsl:template match="web-app/servlet">
                position=<xsl:value-of select="position()"></xsl:value-of>
            <xsl:copy-of select="."></xsl:copy-of>

        </xsl:template>
</xsl:stylesheet>
Avatar billede atoft Nybegynder
08. januar 2004 - 13:15 #3
Jeg er ikke helt med på hvad du vil? Jeg tror ikke du nogenside for kaldt "web-app/servlet" templaten. Gør du?
Avatar billede js26 Nybegynder
08. januar 2004 - 13:26 #4
"web-app/servlet" har højere prioritet end "web-app/* | comment()" , så derfor bliver den kaldt.
Det jeg vil er at indsætte et element i et xml dokument, som iøvrigt skal forblive uforandret. (nb: i det viste ex. er jeg ikke kommet til at indsætte det ekstra element).
Avatar billede atoft Nybegynder
08. januar 2004 - 13:38 #5
Så det du ønsker, er altså at kopier alle noder under webapp. Og i det tilfælde der er første web-app/servlet du møder vil du gerne indsætter noget ekstra. Er det korrekt?
Avatar billede js26 Nybegynder
08. januar 2004 - 13:41 #6
fuldstændig korrekt
Avatar billede js26 Nybegynder
08. januar 2004 - 13:50 #7
Nu har jeg løst det med følgende:
<xsl:template match="web-app/servlet">
<xsl:copy-of select="."></xsl:copy-of>
</xsl:template>
<xsl:template match="web-app/servlet[1]">
<xsl:copy-of select="."></xsl:copy-of>
</xsl:template>
Avatar billede js26 Nybegynder
08. januar 2004 - 13:52 #8
x
Avatar billede atoft Nybegynder
08. januar 2004 - 13:53 #9
Ja det er godt set, men kan du ikke undvære den første web-app/servlet de burde jo blive fanget at den generelle * | comment() du har
Avatar billede js26 Nybegynder
08. januar 2004 - 14:09 #10
Du har ret og hvis jeg skal være ærlig, så nåede jeg lige at refactor mit xslt inden jeg læste din kommentar.
Mit forløbige xslt ser nu sådan ud:
Avatar billede js26 Nybegynder
08. januar 2004 - 14:15 #11
Undskyld:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" omit-xml-declaration="no" indent="yes" doctype-public="-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" doctype-system="http://java.sun.com/dtd/web-app_2_3.dtd" />
       
        <xsl:template match="/">
            <xsl:apply-templates select="web-app/* | web-app/comment()"></xsl:apply-templates>
        </xsl:template>
       
        <xsl:template match="web-app/* | comment()">
            <xsl:copy-of select="."></xsl:copy-of>
        </xsl:template>
       
        <xsl:template match="web-app/servlet[1]">
            <xsl:copy-of select="document('C:\tmp2\web2.xml')/web-app/servlet"></xsl:copy-of>   
            <xsl:copy-of select="."></xsl:copy-of>
        </xsl:template>
       
</xsl:stylesheet>
Avatar billede atoft Nybegynder
08. januar 2004 - 14:15 #12
Det må også kunne laves en template med * | comment() og så anvende en

if hvor man spørger den aktuelle node "servlet" og der ikke er en preceding servlet node
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