Hjälp med XSLT
Hjälp med XSLT
Jag håller på och testar lite med XML/XSL och allt vad det heter, och har stött på ett litet problem. Säg att jag har XML-kod som ser ut så här:
<textgrej>
jadi jadi jadi jadi <fetstil>jadi</fetstil> jadi jadi jada
</textgrej>
Hur gör jag då för att skriva ut detta, med XSL, som XHTML? (Formaterad och klar alltså.) Hur jag än försöker så lyckas jag inte (har inte hållt på med XSL så länge), kan få ut all text, men <fetstil>-elementet "försvinner".. (texten i den skrivs dock ut)
Tack på förhand!
<textgrej>
jadi jadi jadi jadi <fetstil>jadi</fetstil> jadi jadi jada
</textgrej>
Hur gör jag då för att skriva ut detta, med XSL, som XHTML? (Formaterad och klar alltså.) Hur jag än försöker så lyckas jag inte (har inte hållt på med XSL så länge), kan få ut all text, men <fetstil>-elementet "försvinner".. (texten i den skrivs dock ut)
Tack på förhand!
- Peter Wall
- Hedersbit
- Posts: 7026
- Joined: 2002-03-08 0:52:56
- Location: Stockholm
- Contact:
Jag vet inte mycket om XSL och allt det, men är det inte bara
fetstil { font-weight: bold; }
?
fetstil { font-weight: bold; }
?
Fredrik Bränström. Blogg + portfolio, så småningom.
Jag har prövat xsltproc under linux. Genom att skriva sk xslt style sheets går det sedan att mangla om XMLen till något annat (text, XHTML, ...).
För ditt exempel borde det funka med (filter.xslt):
Sedan kör du från promten: . och ut ploppar
Notera att vanlig text (tex "jadi") per default skickas rakt igenom xslt, för allt annat tex din fetstil-tag måste det matchas av någon template.
För ditt exempel borde det funka med (filter.xslt):
Code: Select all
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" version="1.0"
xmlns:html="http://www.w3.org/1999/xhtml">
<xsl:output method="html" indent="yes" encoding="iso-8859-1"/>
<xsl:template match="textgrej">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="fetstil">
<b><xsl:apply-templates/></b>
</xsl:template>
</xsl:stylesheet>
Code: Select all
xsltproc filter.xslt example.xml
Code: Select all
<p xmlns:exsl="http://exslt.org/common" xmlns:html="http://www.w3.org/1999/xhtml">
jadi jadi jadi jadi <b>jadi</b> jadi jadi jada
</p>
Får tacka så mycket för hjälpen! Vill helst dock undvika att behöva göra så, utan att låta webbläsaren formatera om XMLen direkt. Ska testa lite på det sättet som du föreslog, men direkt i webbläsaren. Har lyckats lösa det på ett annat sätt, ett som inte ser särskilt snyggt ut. Jag loopar igenom alla element och kollar vad name() är osv. Men fortsätter väl leka lite, se ifall det inte går att lösa på något snyggare sätt.
EDIT: Ehem ja ok, det gick lite lättare att göra så som du visa, med lite fler templates. Men har stött på ett nytt problem nu. Vill inte bara kunna formatera texten sådär, utan även kunna göra länkar. (t.ex: <länk adress="url">dumdidum</länk>), men vet inte riktigt hur jag kan få in url:en i href-attributet på a-taggen i XHTML-outputen. (Ifall någon inte förstår den där meningen så säg till så försöker jag förklara bättre...)
EDIT2: Ska göra ett försök att förklara lite bättre. Säg att jag har den här koden:
Hur kan jag få in värdet av @adress i href-attributet?
EDIT3: Lyckades komma på det själv.
EDIT: Ehem ja ok, det gick lite lättare att göra så som du visa, med lite fler templates. Men har stött på ett nytt problem nu. Vill inte bara kunna formatera texten sådär, utan även kunna göra länkar. (t.ex: <länk adress="url">dumdidum</länk>), men vet inte riktigt hur jag kan få in url:en i href-attributet på a-taggen i XHTML-outputen. (Ifall någon inte förstår den där meningen så säg till så försöker jag förklara bättre...)
EDIT2: Ska göra ett försök att förklara lite bättre. Säg att jag har den här koden:
Code: Select all
<xsl:template match="länk">
<xsl:value-of select="@adress" />
<a href=""><xsl:apply-templates /></a>
</xsl:template>
EDIT3: Lyckades komma på det själv.
Code: Select all
<xsl:template match="länk">
<a href="{@adress}"><xsl:apply-templates /></a>
</xsl:template>
Prova med
EDIT_1: Okidock, vi kom på det samtidigt
Jag har bara provat XSLT med xsltproc, hur funkar det att göra det dirket i webläsaren?
Code: Select all
<xsl:template match="länk">
<a href="{@adress}"><xsl:value-of select="."/></a>
</xsl:template>
Jag har bara provat XSLT med xsltproc, hur funkar det att göra det dirket i webläsaren?
Nu har inte jag testat att göra på något annat sätt än i webbläsare, men skulle tippa på att det är ungefär samma sak, men man måste ha en liknande rad i XML-filen:karlm wrote:Jag har bara provat XSLT med xsltproc, hur funkar det att göra det dirket i webläsaren?
Code: Select all
<?xml-stylesheet type="text/xsl" href="dumdidum.xsl"?>