[XSLT] Misvormde layout bij gebruik method XML

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bakakaizoku
  • Registratie: Januari 2002
  • Laatst online: 17-09 10:27
Voor een project waar ik mee bezig ben word een stuk XSLT gebruikt om data uit een XML file te weergeven.

De XSL welke hiervoor gebruikt wordt is:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" media-type="text/html" omit-xml-declaration="yes" encoding="utf-8" indent="yes"/>

<xsl:param name="limit" />
<xsl:param name="pid" />

<xsl:template match="advertorials">
    <xsl:for-each select="category[@pid=$pid]/advertorial[position() &lt; $limit]">
        <div class="advertorial">
            <div class="advertorialTitle"><xsl:value-of select="caption"/></div>
            <div class="advertorialContent">
                <div class="advertorialText"><xsl:value-of select="teaser"/></div>
                <span><a href="/advertorial-{@client}-{/advertorials/category[@pid=$pid]/@simplename}.html" onclick="return showAdvertorial('{@client}','{/advertorials/category[@pid=$pid]/@simplename}','{@orientation}');" title="Verder lezen">Verder lezen ></a></span>
            </div>
            <div class="advertorialImage">
                <a href="/advertorial-{@client}-{/advertorials/category[@pid=$pid]/@simplename}.html" onclick="return showAdvertorial('{@client}','{/advertorials/category[@pid=$pid]/@simplename}','{@orientation}');" title="Verder lezen"><img src="/images/advertorials/{@client}/{/advertorials/category[@pid=$pid]/@simplename}-thumb.jpg" alt="{caption}" /></a>
            </div>
            <div class="clear"></div>
        </div>      
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>


Het probleem waar ik tegen aan loop is als volgt. Op het moment dat de output method op html staat, word de pagina "probleemloos" gerenderd, echter qua validatie klopt de html output niet meer, daar de <img/> tag word omgezet naar een <img> tag, dus bijvoorbeeld waar het "<img src="a.jpg" />" zou moeten zijn, wordt dit omgezet naar "<img src="a.jpg">". Op het moment dat ik de output method op xml zet, wat dit tegen zou moeten gaan, wordt de pagina ineens compleet foutief gerenderd, wat inhoudt dat er dingen schots en scheef gaan staan en/of verdwijnen. Overigens word de opbouw van XML -> XSLT geregeld door PHP en niet clientside.

Is er een andere manier om selfclosing tags te forceren? Of heb ik iets doms gedaan in de XSL? Aan jullie de eer, ik kom er niet meer uit ;)

PSN: bakakaizoku - WoW: Thiccblonde (GM of Phoenix Ascension) @ Twisting-Nether


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:18

crisp

Devver

Pixelated

Als je de output method op xml zet moet je hem denk ik ook als XHTML serveren en niet als HTML. In HTML gaan dingen als <div /> natuurlijk fout.

Persoonlijk zou ik gewoon de output method op HTML laten staan en een nette HTML doctype erboven plakken ipv geforceert proberen nep-XHTML uit te poepen.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • bakakaizoku
  • Registratie: Januari 2002
  • Laatst online: 17-09 10:27
crisp schreef op vrijdag 19 februari 2010 @ 10:34:
Als je de output method op xml zet moet je hem denk ik ook als XHTML serveren en niet als HTML. In HTML gaan dingen als <div /> natuurlijk fout.

Persoonlijk zou ik gewoon de output method op HTML laten staan en een nette HTML doctype erboven plakken ipv geforceert proberen nep-XHTML uit te poepen.
De doctype van het document waar het in wordt gezet is een xhtml1.0 doctype, als je er op doelt deze aan te passen naar een html 4.0 doctype, tja die keus/mogelijkheid heb ik helaas niet. Als je doelt op een nette html doctype in de XSLT zelf, dat werkt ook niet want dan komt er een <!doctype/> tag midden in de html te staan.

PSN: bakakaizoku - WoW: Thiccblonde (GM of Phoenix Ascension) @ Twisting-Nether


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:18

crisp

Devver

Pixelated

Maar check nu gewoon eens de output van je transformatie; doet hij bij meer elementen dan alleen diegenen die in HTML geen closetag hebben een 'short-close'? Zoals <div class="clear" /> bijvoorbeeld?

Als dat namelijk het geval is dan *moet* je hem ook als application/xml+xhtml gaan serveren (en IE-support dus vaarwel zeggen) aangezien het voor een HTML parser gewoon een open-tag is die niet gesloten wordt.

Waarschijnlijk zijn er wel opties die je mee kan geven aan de processor (doctype opgeven bij de output declaratie?) die wel rekening houdt met dit soort dingen, maar doorgaans is gewoon HTML outputten simpeler en correcter (imho).

Andere optie is gewoon het gezeur van de validator negeren; de meeste documenten op het web die pretenderen XHTML te zijn (maar gewoon als HTML geserveerd worden) valideren toch niet :+

[ Voor 33% gewijzigd door crisp op 19-02-2010 11:04 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Blue-eagle
  • Registratie: September 2000
  • Niet online
In je XSL:Output tag kan je ook doctype-public en doctype-system opnemen, bijvoorbeeld de MSXML processor zorgt ervoor dat de juiste doctype in je output komt te staan. En inderdaad de output method op XML zetten.

http://www.w3schools.com/xsl/el_output.asp

Acties:
  • 0 Henk 'm!

  • bakakaizoku
  • Registratie: Januari 2002
  • Laatst online: 17-09 10:27
Ik ben er al uit dat het gewoon aan m'n XSL lag, want andere XSL stylesheets met de method op XML gooiden niet de layout om zeep.

Bedankt in ieder geval voor het meedenken.

PSN: bakakaizoku - WoW: Thiccblonde (GM of Phoenix Ascension) @ Twisting-Nether

Pagina: 1