webForumDet fria alternativet

deklarera xsl funktion

XML

7 svar · 1 219 visningar · startad av drew

Medlem sedan mars 2007845 inlägg
Frågan#1

Jag har en funktion från http://www.dpawson.co.uk/xsl/sect2/replace.html#d9701e43 som ska byta ut del av en sträng. Funktionen finns nedanför.

Jag har försökt lägga den i xsl filen som används för att visa xml-dokumentet och att ha den i en separat xsl-fil. Jag har läst hela natten och gör som alla exempel säger. Men får "Fel vid transformering av XSLT: En okänd XPath-tilläggsfunktion anropades." av FF hur jag än gör.

Hur ska funktionen defineras och var? I samma fil eller en extern fil? Hur ska funktionsanropet se ut?

MVH
/D

<xsl:template name="replace-string">
  <xsl:param name="text"/>
  <xsl:param name="replace"/>
  <xsl:param name="with"/>
  <xsl:choose>
    <xsl:when test="contains($text,$replace)">
      <xsl:value-of select="substring-before($text,$replace)"/>
      <xsl:value-of select="$with"/>
      <xsl:call-template name="replace-string">
        <xsl:with-param name="text" select="substring-after($text,$replace)"/>
        <xsl:with-param name="replace" select="$replace"/>
        <xsl:with-param name="with" select="$with"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$text"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>
Medlem sedan mars 2007845 inlägg
#2

Jag upptäckte att funktionen replace finns i xslt2. Jag använder xslt2 men får ändå "Fel vid transformering av XSLT: En okänd XPath-tilläggsfunktion anropades."

Jag deklarerar enligt exemplen jag hittat på diverse ställen på nätet.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:mod="http://vilden.se/mods/xml/modx-1.2.3.xsd"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:fn="http://www.w3.org/2005/xpath-functions"
	xmlns:local="http://www.w3.org/2005/XQuery-local-functions"
	xmlns:xq="java:Xq2xml"
	xmlns:xdt="http://www.w3.org/2005/xpath-datatypes"
	version="2.0"
	extension-element-prefixes="xq"
	exclude-result-prefixes="xq xs xdt local fn">

Enligt dom sidor i ämnet jag hittat så borde det fungera.

<xsl:value-of select="replace('hejsan', 'san', 'sa')" />

Jag börjar bli smått desperat här. Någon?

Medlem sedan juni 200032 967 inlägg
#3

Replace är tyvärr ett riktigt helvete i xsl - jag har varit där och trasslat ett antal gånger och alltid löst problemet genom att göra replace innan jag blandar in xsl.

Se om detta kan hjälpa: http://www.devx.com/tips/Tip/37045

Medlem sedan mars 2007845 inlägg
#4

Jag kan inte göra replace innan xsl kommer med, tror jag.
Jag parsar en xml-fil och därifrån kommer bl a ett användarnamn. Det är vissa tecken i användarnamnet som ska bytas ut för att skapa en url, men ankartexten ska inte ändras.

<a href="http://www/profile.php?n={replace(username, '#', '%23')}"><xsl:value-of select="username" /></a></dd>

Tack för länken men jag tror att den ändrar alla förekomster av # och inte bara den i adressen. Dessutom ligger det i en loop så det kan vara flera användarnamn.

Medlem sedan juni 200032 967 inlägg
#5

Var kommer xml:en ifrån?

Om du ska göra det i xsl är jag rädd att du får göra det enligt ditt första försök. Jag har aldrig fått det att fungera - och det är typiskt denna sorts grejer som gör att jag avskyr att jobba med xsl. ;)

Medlem sedan mars 2007845 inlägg
#6

xml'en kommer från en instruktionsfil för modifikationer. Användarnamnet är namnet/namnen på den/dom som skapat den. Den ska öppnas lokalt med en webbläsare. Jag funderade på att använda JavaScript och onclick(), men då funkar det inte att klicka med mittknappen för att öppna i ny flik. Ska nog låta det ligga ett par dagar och rensa hjärnan på detta lite. Tack.

Medlem sedan juni 200032 967 inlägg
#7

Jag återkommer om jag kommer på nåt. :)

Medlem sedan mars 2007845 inlägg
#8

Den första fungerade när jag väl lärt mig hur man använder funktioner och templaten i XML.

259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)