Just nu i M3-nätverket
Jump to content

XSL / CSS Problem i Firefox


mr.Dizzle

Recommended Posts

Hej, jag har problem med att få min XSL att foramteras av CSS i Firefox...

 

I IE funkar det hur bra som helst, men i FF så ser jag allt text innehåll från XSL:en men inget av den information som hämtas från mina XML-filer...dessutom verkar verkar inte CSS:en göra något överhuvudtaget.

 

Finns det någon där ute som har någon aning om varför jag har detta problem?

 

Link to comment
Share on other sites

Hur har du länkat till CSS:en? T ex tillåter IE felaktigt att man skriver

 

<?xml:stylesheet href="nånting.xsl" type="text/xsl"?>

 

istället för det korrekta

 

<?xml-stylesheet href="nånting.xsl" type="text/xsl"?>

 

[inlägget ändrat 2005-03-06 10:02:30 av zerblat]

Link to comment
Share on other sites

Jag ska börja med att säga att jag är ganska ny på det här med XSLT...

Så här är det, jag försöker transformerta till html...

 

 

<?xml version="1.0" encoding="ISO-8859-1"?>

 

<xsl:transform version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:xhtml="http://www.w3.org/1999/xhtml">

 

<?xml-stylesheet href="href="../style.css" type="text/css"?>

 

<xsl:output

method="html"

encoding="iso-8859-1"/>

 

<xsl:template match="/">

<html>

<head>

<title>Wislunds</title>

<link rel="stylesheet" type="text/css" href="../style.css" />

<link rel="icon" type="image/ico" href="Favicon.ico"/>

</head>

osv. osv.

 

 

CSS:en verka nu fungera korrekt men istället verkar inte XSL:delen fungera i Firefox....layouten är korrekt men inget innehåll presenteras. Fungerar som sagt i IE...

Jag är medveten om att jag har dubbla referenser till CSS:en men den övre verkar inte göra någon skillnad.

Har jag missat något ? eller har jag gjort något fel??

 

Hjääääälp! =)

 

 

Link to comment
Share on other sites

Med xsl(t) transformerar du dokument från de ena till andra. Dessa dokument skall inte i sig själva stilsättas. Däremot kan du använda css i stilsättningen av transfomerade dokument.

 

Du kan t.ex. ha ett dokument "test.xml" som är xml i detta fall av typen fo, typ:

 

[log]<?xml version="1.0" encoding="utf-8"?>

<?xml-stylesheet type="text/xsl" href="fo2html.xsl"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" font-family="serif" font-size="10pt" text-align="justify" line-height="normal" font-selection-strategy="character-by-character" language="en"> ...etc[/log]

 

Här ser du ovan en (IE) rad:

<?xml-stylesheet type="text/xsl" href="fo2html.xsl"?>

som refererar till ett xsl-dokument "fo2html.xsl" Detta transformeringsdokument kanse ut som, typ:

 

[log] prolog...

<xsl:template match="fo:root">

<html>

<head>

<title>

<xsl:choose>

<xsl:when test="descendant::fo:title[1]">

<xsl:value-of select="fo:title"/>

</xsl:when>

<xsl:otherwise>XSL FO Document</xsl:otherwise>

</xsl:choose>

</title>

<META http-equiv="Content-Style-Type" content="text/css"/>

<style type="text/css">

a { color: black; border: none; text-decoration: none; }

img { border: none; }

</style>

</head>

<body>

<xsl:apply-templates select="fo:page-sequence"/>

</body>

</html>

</xsl:template>[/log]

 

Eftersom "test.xml" refererar till "fo2html.xsl" och IE transformerar xml-dokument med xsl, så kommer alltså ett "nytt HTML-dokument" att bildas om du dubbelklickar "text.xml" (egentligen bara renderingen).

 

 

Link to comment
Share on other sites

Jag transformerar ju XML till XHTML för att sedan lägga till CSS. Det fungerar som sagt...det som inte fungerar var XSL delen. Jag vet nu varför. Jag hade XML dokument som länkade in andra XML dokument, detta fungerar inte i Firefox av okänd anledning...

 

 

Då uppstår nästa problem... kan jag hämta information från en annan XML fil direkt från min XSL, förutom den som länkar till XSL filen?

 

Kortfattat, det jag vill göra är att hämta information från flera XML filer till samma XSL utan att länka XML filern till varandra.

 

[inlägget ändrat 2005-03-07 21:26:54 av mr.Dizzle]

[inlägget ändrat 2005-03-07 21:39:24 av mr.Dizzle]

Link to comment
Share on other sites

Ja, det med Firefox versus MSIE är väl att MS använder ofta egna lösningar (som Zerblat implicerade) på det som ofta redan finns standardiserat, eller föregår standardiseringen med egna lösningar. Bland annat hur ett transformering/stilsättningsdokument länkas till den fil som skall transformeras ...

 

Jag har lite problem att se helt transparent exakt vad det är du önskar göra ("kan jag hämta information från en annan XML fil direkt från min XSL, förutom den som länkar till XSL filen?"), men här kommer några idéer till:

 

Om du vill inkludera exempelvis html i din xsl kan du göra det med en parsad entitet:

 

[log]<?xml version="1.0"?>

<!DOCTYPE xsl:stylesheet [

<!ENTITY what SYSTEM "whatever.html">

]>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"'>http://www.w3.org/1999/XSL/Transform">'>http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<html>

<head><title>Test Page</title></head>

<body>

 

&what;

 

<xsl:apply-templates />

</body>

</html>

</xsl:template>

</xsl:stylesheet>[/log]

 

Ett mer raffinerat sätt att själva parsa yttre dokument är via document(). Dvs. document() inkluderar flera html-dokument till ditt xsl. Här exempelvis som en variabel tabledoc med värde "sorttable.xml" används senare i processningen:

 

[log]<?xml version='1.0'?>

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

version="1.0">

<xsl:import href="element.xsl"/>

<xsl:variable name="tabledoc">sorttable.xml</xsl:variable>

<xsl:template match="insert-table">

<xsl:if test="@id"><a name="{@id}"/></xsl:if>

<xsl:apply-templates select="document($tabledoc)"/>

</xsl:template>

<xsl:template match="table">

<table>

<xsl:apply-templates select="row">

<xsl:sort data-type="number" select="./cell[1]"/>

</xsl:apply-templates>

</table>

</xsl:template>

</xsl:stylesheet>[/log]

 

Vill du inkludera fler xsl-processingar mer elegant tillsammans, kan du göra det med en "inklude" (som ävne visats ovan, men det finns även mer hårdhänt <xsl:include>):

 

[log]<?xml version='1.0'?>

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

version="1.0">

 

<xsl:import href="element.xsl"/>

 

<xsl:template match="table">

<xsl:if test="@id"><a name="{@id}"/></xsl:if>

<table>

<xsl:apply-templates select="row">

<xsl:sort data-type="number" select="./cell[1]"/>

</xsl:apply-templates>

</table>

</xsl:template>

</xsl:stylesheet>[/log]

 

Några tips så länge ...

 

 

Link to comment
Share on other sites

Tack så mycket för hjälpen!

Jag är ju som sagt ganska ny på det här så jag ursäkter om jag uttrycker mig otydligt. Jag är inte bekant med alla termer för att uttrycka mig mer exakt...

 

Hur som helst så löste jag problemet men med en enklare variant.

Eftersom min XSL till större del består av for-each i olika varianter så blir det ganska effektivt ändå.

 

Jag hämtade helt enkelt den nod jag vill ha och specificerade document:

 

<xsl:value-of select="document('whatever.xml')//nod/@värde"/>

 

Funkar hur bra som helst, kanske finns bättre lösningar men den duger :)

 

 

Men givetvis har jag en ny fråga ;)

 

När jag transformerat mitt dokument så blir det i princip xhtml, eller?

Jag försöker validera mina filer men det skiter sig direkt.

 

Kan jag lägga in DOCTYPE i min transform på nåt sätt eller hur funkar detta?

 

 

Link to comment
Share on other sites

Det är roligt att höra att det fungerar bra! :)

 

Ja, det finns en standardiserad instruktion om man bara vill ha enklare variant, t.ex. för SYSTEM:

<xsl:output doctype-system="minegen.dtd"/>

som kan spotta ut doctypen.

 

Eller mer relevant:

<xsl:output doctype-public-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />

 

 

 

Link to comment
Share on other sites

DexterVanDerKillen

Låna denna tråd lite eftersom jag har samma typ av problem.

 

Funkar fint i IE men i Firefox kommer allt på samma rad.

 

Min XML-fil:

<?xml-stylesheet type="text/xsl" href="workdays.xsl"?>

<workdays>

<workday starttime="2005-03-07 07:38" stoptime="2005-03-07 16:08" workedtime="08:07">

<timenote starttime="2005-03-07 12:30" stoptime="2005-03-07 12:53" iswork="no">

<note>Lunch</note>

</timenote>

</workday>

<workday starttime="2005-03-08 07:18" stoptime="2005-03-08 16:05" workedtime="08:25">

<timenote starttime="2005-03-08 12:01" stoptime="2005-03-08 12:03" iswork="yes">

<note>Type a note here...</note>

</timenote>

<timenote starttime="2005-03-08 12:27" stoptime="2005-03-08 12:48" iswork="no">

<note>Lunch</note>

</timenote>

</workday>

<workday starttime="2005-03-09 07:47" stoptime="2005-03-09 16:26" workedtime="08:24">

<timenote starttime="2005-03-09 12:02" stoptime="2005-03-09 12:18" iswork="no">

<note>Lunch</note>

</timenote>

</workday>

</workdays>

 

Och XSL-filen:

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns="http://www.w3.org/TR/xhtml1/strict">

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:text>Arbetstider</xsl:text></TITLE>

</HEAD>

 

<BODY>

<TABLE>

<CAPTION>

<xsl:text>Arbetstider</xsl:text>

</CAPTION>

 

<TR>

<TD>Datum</TD>

<TD>Start</TD>

<TD>Stopp</TD>

<TD>Total</TD>

<TD>Anteckningar</TD>

</TR>

 

<xsl:for-each select="workdays/workday">

<TR>

<TD><xsl:value-of select="substring(@starttime, 1, 10)"/></TD>

<TD><xsl:value-of select="substring(@starttime, 12, 5)"/></TD>

<TD><xsl:value-of select="substring(@stoptime, 12, 5)"/></TD>

<TD><xsl:value-of select="@workedtime"/></TD>

<TD>

<TABLE>

<xsl:for-each select="timenote">

<TR>

<TD><xsl:value-of select="note"/></TD>

<TD><xsl:value-of select="substring(@starttime, 12, 5)"/></TD>

<TD><xsl:text>till</xsl:text></TD>

<TD><xsl:value-of select="substring(@stoptime, 12, 5)"/></TD>

</TR>

</xsl:for-each>

</TABLE>

</TD>

</TR>

</xsl:for-each>

</TABLE>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...