Avatar billede odie Nybegynder
07. juni 2006 - 14:22 Der er 13 kommentarer og
1 løsning

apply-templates with-param

Hej igen...

Nu er der kommet et nyt problem i mit forsøg på at lære XSL:

Flg. Virker: (indholdet kommer frem på siden)
<xsl:call-template name="linkparser">
<xsl:with-param name="input" select="Data/Menulist/Menu[Index=$p]/MenuCont" />
</xsl:call-template>

Men kalder kun MenuCont én gang. Der er flere MenuCont i samme Menu[Index=$p]

Derfor har jeg forsøgt at lege med apply-templates men flg. virker ikke :( : (indholdet på siden er "ingenting"):
<xsl:apply-templates select="linkparser">
<xsl:with-param name="input" select="Data/Menulist/Menu[Index=$p]/MenuCont" />
</xsl:apply-templates>

Bruger jeg apply-templates with-param forkert ?

På forhånd tak for hjælpen.

/Odie
Avatar billede softspot Forsker
07. juni 2006 - 14:52 #1
Det komme an på hvordan den template som fanger linkparser-elementet ser ud... kan du vise den?
Avatar billede odie Nybegynder
07. juni 2006 - 15:05 #2
Selvfølgelig:

<xsl:template name="linkparser">
  <xsl:param name="input" />
<xsl:choose>
<xsl:when test="contains($input,'[link]')">
  <xsl:variable name="txtBefore" select="substring-before($input,'[link]')" />
  <xsl:variable name="txtAfter" select="substring-after($input,'[/link]')" />
  <xsl:variable name="url" select="substring-before(substring-after($input, '[link]'), '[linktekst]')" />
  <xsl:variable name="tekst" select="substring-before(substring-after($input, '[linktekst]'), '[/linktekst]')" />
<xsl:variable name="returnValue">
  <xsl:value-of select="$txtBefore" />
  <a href="http://
  <xsl:value-of select="$url" />
  " target="_blank">
  <xsl:value-of select="$tekst" />
  </a>
  <xsl:value-of select="$txtAfter" />
  </xsl:variable>
<xsl:call-template name="linkparser">
  <xsl:with-param name="input" select="$returnValue" />
  </xsl:call-template>
  </xsl:when>
<xsl:otherwise>
  <xsl:value-of select="$input" disable-output-escaping="yes" />
  </xsl:otherwise>
  </xsl:choose>
  </xsl:template>

/Odie
Avatar billede softspot Forsker
07. juni 2006 - 15:43 #3
Der er noget galt med syntaksen af din XSLT, så lad os lige få styr på den først...

Flg. er IKKE tilladt:

  <a href="http://
  <xsl:value-of select="$url" />
  " target="_blank">

Det kan du f.eks. gøres således i stedet:

  <a href="http://{$url}" target="_blank">
Avatar billede odie Nybegynder
07. juni 2006 - 15:46 #4
softspot.. Jeg har ikke adgang til at rette i selve koden herfra hvor jeg er nu, så når jeg kommer hjem prøver jeg at rette i koden...

Vender tilbage senere i aften :-)

/Odie
Avatar billede softspot Forsker
07. juni 2006 - 15:50 #5
Helt fint med mig :)
Avatar billede odie Nybegynder
07. juni 2006 - 18:57 #6
Hej igen

Rettet men stadigvæk ikke noget output :(

/Odie

  <xsl:template name="linkparser">
    <xsl:param name="input" />

    <xsl:choose>
      <xsl:when test ="contains($input,'[link]')">

        <xsl:variable name="txtBefore" select="substring-before($input,'[link]')"/>
        <xsl:variable name="txtAfter" select="substring-after($input,'[/link]')"/>

        <xsl:variable name="url" select="substring-before(substring-after($input, '[link]'), '[linktekst]')" />
        <xsl:variable name="tekst" select="substring-before(substring-after($input, '[linktekst]'), '[/linktekst]')" />

        <xsl:variable name="returnValue">
          <xsl:value-of select="$txtBefore" />&lt;a href="http://{$url}" target="_blank"&gt;<xsl:value-of select="$tekst" />&lt;/a&gt;
          <xsl:value-of select="$txtAfter" />
        </xsl:variable>

        <xsl:call-template name="linkparser">
          <xsl:with-param name="input" select="$returnValue" />
        </xsl:call-template>
       
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$input" disable-output-escaping="yes"/>

      </xsl:otherwise>
     
    </xsl:choose>
   
  </xsl:template>

Min XML fil ser sådan her ud:

<Data>
    <Menulist>
        <Menu>
            <MenuCont>Linie 1</MenuCont>
            <MenuCont>Linie 2</MenuCont>
        </Menu>
    </Menulist>
</Data>
Avatar billede softspot Forsker
07. juni 2006 - 20:13 #7
OK, jeg havde ikke lige fanget din problemstilling. Det du bare skal gøre er at benytte <xsl:for-each> til at gennemløbe alle MenuCont-elementerne og så stadig benytte <xsl:call-template> som du gjorde fra starten. Altså noget i stil med dette:

<xsl:for-each select="Data/Menulist/Menu[Index=$p]/MenuCont">
  <xsl:call-template name="linkparser">
    <xsl:with-param name="input" select="." />
  </xsl:call-template>
</xsl:for-each>

<xsl:template name="linkparser">
  <xsl:param name="input" />
  <xsl:choose>
    <xsl:when test ="contains($input,'[link]')">
      <xsl:variable name="txtBefore" select="substring-before($input,'[link]')" />
      <xsl:variable name="txtAfter" select="substring-after($input,'[/link]')" />
      <xsl:variable name="url" select="substring-before(substring-after($input, '[link]'), '[linktekst]')" />
      <xsl:variable name="tekst" select="substring-before(substring-after($input, '[linktekst]'), '[/linktekst]')" />
      <xsl:variable name="returnValue">
        <xsl:value-of select="$txtBefore" /><a href="http://{$url}" target="_blank"><xsl:value-of select="$tekst" /></a><xsl:value-of select="$txtAfter" />
      </xsl:variable>

      <xsl:call-template name="linkparser">
        <xsl:with-param name="input" select="$returnValue" />
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$input" disable-output-escaping="yes" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>


Bemærk at jeg har lavet dit link om (<a href=...>), da din ændring gjorde syntaksen invalid igen (eller rettere ikke funktionel). Prøv det lige og se om det skulle være bedre nu...
Avatar billede odie Nybegynder
07. juni 2006 - 20:20 #8
meget meget meget tæt på...........

Når jeg så tilføjer

<MenuCont>[link]http://www.testlink.dk[linktekst]tryk her[/linktekst][/link]</MenuCont>

Så kommer href til at stå som {$url} og ikke http://www.testlink.dk

/Odie
Avatar billede odie Nybegynder
07. juni 2006 - 20:23 #9
Men hvis jeg bruger:

&lt;a href="http://<xsl:value-of select="$url" />" target="_blank"&gt;<xsl:value-of select="$tekst" />&lt;/a&gt;

Så virker det !

Er den helt gal den linie ?

/odie
Avatar billede odie Nybegynder
07. juni 2006 - 20:24 #10
Smider du et svar.. Det er bare så godt..

/Odie
Avatar billede softspot Forsker
07. juni 2006 - 20:27 #11
Hmmm... det er åbenbart mig der har misforstået noget mht. syntaksen, men hvis det fungerer, så er der ikke noget galt med det :)
Avatar billede softspot Forsker
07. juni 2006 - 20:31 #12
Takker for point :)
Avatar billede odie Nybegynder
07. juni 2006 - 20:32 #13
dammed. det er godt.. takker mange gange !!!
Avatar billede softspot Forsker
07. juni 2006 - 20:33 #14
Velbekomme :D
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



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows