webForumDet fria alternativet

Nybörjare XSL(T)

XMLur XML

10 svar · 576 visningar · startad av aron

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

Sitter och pysslar med XSL(T) och funderar över hur man kan formatera min XML-fils utseende (alltså inte med CSS eller nåt sånt, det vet jag hur man gör).

Detta är min XML-Fil:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>

<dokument>
<färg>green</färg>
<dokument-titel>Detta är ett XML/XSL test.</dokument-titel>
<artickel>
    <rubrik>Detta är första rubriken</rubrik>
    <datum>2005-05-05</datum>
    <text>Hej, jag ska testa lite grejor</text>
</artickel>
<artickel>
    <rubrik>Detta är andra rubriken</rubrik>
    <datum>2005-05-05</datum>
    <text>Hej, jag ska testa lite grejor</text>
</artickel>
<ordbok>
	<ord>
		<ordet>XML</ordet>
		<beskrivning>eXtensibleMarkupLanguage</beskrivning>
	</ord>
	<ord>
		<ordet>HTML</ordet>
		<beskrivning>HyperTextMarkupLanguage</beskrivning>
	</ord>
</ordbok>
</dokument>

Min XSL(T)-Fil:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  
<xsl:template match="/">
    <html>
         <head>
             <title><xsl:value-of select="dokument/dokument-titel"/></title>
         </head>
         <body>
           <xsl:attribute name="bgcolor">
             <xsl:value-of select="dokument/färg"/>
           </xsl:attribute>
             <h1 xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.w3.org/"><xsl:value-of select="dokument/dokument-titel"/></h1>
             <xsl:for-each select="dokument/artickel">
                 <h2><xsl:value-of select="rubrik"/></h2>
                 <xsl:value-of select="datum"/>
                 <p><xsl:value-of select="text"/></p>
             </xsl:for-each> 
             <xsl:for-each select="dokument/artickel">
                 <h2><xsl:value-of select="rubrik"/></h2>
                 <xsl:value-of select="datum"/>
                 <p><xsl:value-of select="text"/></p>
             </xsl:for-each> 
	<xsl:for-each select="dokument/ordbok/ord">
        <p><xsl:value-of select="ordet"/><br/><xsl:value-of select="beskrivning"/></p>
        </xsl:for-each>
         </body>
    </html>
</xsl:template>
</xsl:stylesheet>

Det första jag märkte var att XSL-filen inte fungerade med följande Rotelement/Namnrymd:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

Jag undrar varför det inte fungerade, kanske har jag gjort fel. På många ställen där jag läser används denna, men jag får den inte att fungera.

Sen försökte jag sortera min ordbok och det fungerade inte heller:

<xsl:for-each select="dokument/ordbok/ord" order-by="ordet">

Det tycker man ju ska fungera.

Ja vad jag egentligen är ute efter är alltså hur man ändrar utseendet med XSL-filen utan CSS.

Medlem sedan mars 2004485 inlägg
#2

Ja, jag har fortfarande inte kommit så långt.. är det ingen som kan ge mig en liten hint.

Medlem sedan jan. 2003438 inlägg
#3

Tjena, sitter själv och försöker lära mig xml/xslt. Så jag kollade lite och kom fram till nedanstående, om jag nu förstod dig rätt med sorteringen.

ascending = "A - Ö"
descending = "Ö - A"

	<xsl:for-each select="dokument/ordbok/ord">
        <xsl:sort
		select="ordet"
		data-type="text"
		order="ascending"/>
        <p><xsl:value-of select="ordet"/><br/><xsl:value-of select="beskrivning"/></p>
        </xsl:for-each>
Medlem sedan mars 2004485 inlägg
#4

Ja, det där fungerade bättre.. tack så mycket.

Kan man på nåt sätt få tag på HTML-koden som genereras?

Medlem sedan jan. 2003438 inlägg
#5

Det var så lite så.

Du får nog förklara lite mer vad du menar och vad det är som du vill få fram i slutändan.

Medlem sedan mars 2004485 inlägg
#6

Det finns kanske inte något sätt, men det vore praktiskt om man kunde få fram något likt detta på något vis. Från mit exempel.

<html>
<head>
<title>Detta är ett XML/XSL test.</title>
</head>
<body bgcolor="green">

....
....

</body>
</html>

Sen så har jag ju kvar många av frågorna jag stälde förut.

Medlem sedan jan. 2003438 inlägg
#7

Hej igen!

Svarar lite snabb med en länk som kanske kan ge dig några svar.

http://www.w3.org/TR/xsl/

Vet inte om din xsl-fil funkar men

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

Ändra till så skall filen funka:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Medlem sedan mars 2004485 inlägg
#8

Jo... jag hittar ganska bra på W3C.. men det är mzcket att läsa.

En betydligt bättre sida är:

http://www.w3.org/Style/XSL/

Medlem sedan maj 2005562 inlägg
#9

Finns även på
http://www.w3schools.com/xsl/

Medlem sedan dec. 20042 245 inlägg
#10

Kan man på nåt sätt få tag på HTML-koden som genereras?

I Firefox: markera allt, högerklicka, View selection source. :)

Du kanske vill ange en DOCTYPE så koden som genereras är valid, samt att det renderas i Standards mode. :)

<xsl:output
 method="html"
 doctype-public="-//W3C//DTD HTML 4.01//EN"
 doctype-system="http://www.w3.org/TR/html4/strict.dtd"
 encoding="iso-8859-1"/>
<xsl:template match="/">
...
Medlem sedan sep. 20034 inlägg
#11

Några korta kommentarer till tråden (premiärinlägg!):

aron skrev:

Min XSL(T)-Fil:

...
    <h1 xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.w3.org/"><xsl:value-of select="dokument/dokument-titel"/></h1>
...

Jag föreslår att du inte blandar in XLink. Skapa vanliga HTML-länkar.

aron skrev:

Det första jag märkte var att XSL-filen inte fungerade med följande Rotelement/Namnrymd:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

Namnrymden refererar till en föråldrad version av XSLT som Microsoft tog fram för länge sedan. Undvik.

SannyW skrev:

Vet inte om din xsl-fil funkar men

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

Ändra till så skall filen funka:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Ovanstående två kodexempel har exakt samma innebörd. I vilken ordning attributen kommer saknar betydelse i XML.
Att sätta version till 2.0 är tveksamt. XSLT 2.0-specifikationen är inte klar ("Working Draft" hos W3C). För XSLT som skall funka i en webbläsare är det definitivt 1.0 som gäller.

zcorpan skrev:

Du kanske vill ange en DOCTYPE så koden som genereras är valid, samt att det renderas i Standards mode. :)

<xsl:output
 method="html"
 doctype-public="-//W3C//DTD HTML 4.01//EN"
 doctype-system="http://www.w3.org/TR/html4/strict.dtd"
 encoding="iso-8859-1"/>
<xsl:template match="/">
...

Förtydligande: att ange en DTD via doctype-public och doctype-system är ingen garanti för att resultatet är "valid", dvs att det följer reglerna i DTD:n.

/M

143 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)