Avatar billede odie Nybegynder
30. maj 2006 - 07:43 Der er 2 kommentarer og
1 løsning

Replace funktion i XSL

Hej XSL freaks

Jeg har prøvet at lege med translate, men kan ikke få den til at gøre hvad jeg vil....

I øjeblikket har jeg bla. flg. tekst, som skal laves om.

Almindelig tekst [link]www.link.dk[linktekst]txt på link der kan trykkes på[/linktekst][/link] almindelig tekst fortsætter

Pt. gør jeg således i ASP (nogenlunde):

txtstreng= "[link]www.link.dk[linktekst]txt på link der kan trykkes på[/linktekst][/link]"
txtstreng=replace(txtstreng,"[link]","<a href=")
txtstreng=replace(txtstreng,"[linktekst]",">")
txtstreng=replace(txtstreng,"[/linktekst][/link]","</a>")

Hvordan gør man det i XSL ?

Resultat skal naturligvis være flg.:

Almindelig tekst <a href=wwww.link.dk>txt på link der kan trykkes på</a> almindelig tekst fortsætter

På forhånd tak.

/Odie
Avatar billede Slettet bruger
30. maj 2006 - 10:36 #1
XSLT (1.0) er ikke specielt velegnet/designet til den slags, men med lidt "moslen" kan det godt lade sig gøre - du skal bruge funktionerne "substring-before()" og "substring-after()":

<xsl:param name="input" /> <!-- Input der skal parses -->

<xsl:template match="__WHATEVER__">
  <xsl:variable name="url" select="substring-before(substring-after($input, '[link]'), '[linktekst]')" />
  <xsl:variable name="tekst" select="substring-before(substring-after($input, '[linktekst]'), '[/linktekst]')" />
  <a href="http://{$url}"><xsl:value-of select="$tekst" /></a>
</xsl:template>

/CS
Avatar billede odie Nybegynder
30. maj 2006 - 12:22 #2
Hey Greystate...

Igen er du der..... Dejligt ;-)

Den er tæt på...

Den cutter dog teksten der kommer før og efter og virker "kun" én gang..... Dvs. er der flere [link] i strengen tager den kun den første....

Hvis du ved hvad der skal til ville det være dejligt, ellers har du igen givet mig noget at gå videre med...

/Odie

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>

<xsl:param name="input">alm. tekst.[link]ddddd.dk[linktekst]teskt[/linktekst]11111[link]ddddd.dk[linktekst]teskt[/linktekst]
</xsl:param> <!-- Input der skal parses -->

    <xsl:template match="/">
        <html>
            <head></head>
            <body>
  <xsl:variable name="url" select="substring-before(substring-after($input, '[link]'), '[linktekst]')" />
  <xsl:variable name="tekst" select="substring-before(substring-after($input, '[linktekst]'),
'[/linktekst]')" />
  <a href="http://{$url}"><xsl:value-of select="$tekst" /></a>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
Avatar billede Slettet bruger
30. maj 2006 - 12:38 #3
Yes, yes - tænkte jo nok det ikke var nok :-)

Den korte (og Google-forberedte) forklaring på løsningen er:
Du skal bruge en "recursive template" til det overordnede, og en "named template" til de enkelte erstatninger.

/CS
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