Hjälp med XSLT

Avdelningen för webbrelaterad programmering och grafisk design.
Post Reply
User avatar
robin.
Posts: 315
Joined: 2003-01-05 20:34:27
Location: Strängnäs

Hjälp med XSLT

Post by robin. »

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!
User avatar
Peter Wall
Hedersbit
Posts: 7026
Joined: 2002-03-08 0:52:56
Location: Stockholm
Contact:

Post by Peter Wall »

Styr via en CSS-fil?
Diplomerad webbutvecklare
Microsoft Certified Professional Windows 2003
Microsoft Certified Technology Specialist Windows Vista
"Did you know kidneys and applesauce are a delicacy in Sweden? I'm gonna get my applesauce back!"
User avatar
robin.
Posts: 315
Joined: 2003-01-05 20:34:27
Location: Strängnäs

Post by robin. »

Men problemet är ju att jag inte kan "hitta" texten som ska vara fet, så jag kan inte fixa något med CSS..
User avatar
Branstrom
Hedersbit
Posts: 3487
Joined: 2002-02-22 16:46:37
Location: Härnösand
Contact:

Post by Branstrom »

Jag vet inte mycket om XSL och allt det, men är det inte bara

fetstil { font-weight: bold; }

?
Fredrik Bränström. Blogg + portfolio, så småningom.
User avatar
robin.
Posts: 315
Joined: 2003-01-05 20:34:27
Location: Strängnäs

Post by robin. »

Nee det fungerar tyvär inte, det är nästan som den bara ignorerar alla "barn-noder" till <text>, men hämtar texten som ligger mellan barnets start- och slut-taggar..
User avatar
karlm
Posts: 5
Joined: 2005-07-31 19:48:06

Post by karlm »

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):

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>

Sedan kör du från promten:

Code: Select all

 xsltproc filter.xslt example.xml
. och ut ploppar

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>
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.
User avatar
robin.
Posts: 315
Joined: 2003-01-05 20:34:27
Location: Strängnäs

Post by robin. »

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:

Code: Select all

	<xsl:template match="länk">
		<xsl:value-of select="@adress" />
		<a href=""><xsl:apply-templates /></a>
	</xsl:template>
Hur kan jag få in värdet av @adress i href-attributet?

EDIT3: Lyckades komma på det själv.

Code: Select all

	<xsl:template match="länk">
		<a href="{@adress}"><xsl:apply-templates /></a>
	</xsl:template>
User avatar
karlm
Posts: 5
Joined: 2005-07-31 19:48:06

Post by karlm »

Prova med

Code: Select all

  <xsl:template match="länk">
    <a href="{@adress}"><xsl:value-of select="."/></a>
  </xsl:template>
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?
User avatar
robin.
Posts: 315
Joined: 2003-01-05 20:34:27
Location: Strängnäs

Post by robin. »

karlm wrote: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:

Code: Select all

<?xml-stylesheet type="text/xsl" href="dumdidum.xsl"?>
Sen är det bara att öppna XML-filen i webbläsaren så visas resultatet direkt där.
Post Reply