[php/xslt] output laten identen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 18:28

alienfruit

the alien you never expected

Topicstarter
In PHP heb in een scriptje gemaakt die een XSLT transform uitvoert op een XML file, om zodoende een XHTML pagina te generen. Dit werkt allemaal perfect, alleen de output van deze transform wordt allemaal achter elkaar geplakt.

Kan ik binnen XSLT niet zeggen dat hij de output identen?

Ik maak gebruik van dom_xml extensie in PHP voor de XSLT transforms (gebruikt libxsl).

Acties:
  • 0 Henk 'm!

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03 09:11
code:
1
2
3
4
5
6
7
8
    <xsl:output
        doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
        encoding="UTF-8"
        method="xml"
        indent="yes"
        omit-xml-declaration="no"
    />

Zoiets gebruik ik, samen met:
code:
1
2
3
4
5
6
7
    <xsl:strip-space
        elements="*"
    />
    
    <xsl:preserve-space
        elements="code pre"
    />

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels


Acties:
  • 0 Henk 'm!

  • vargo
  • Registratie: Januari 2001
  • Laatst online: 09:35
Je kan natuurlijk achteraf de output (XHTML) beautifyen.
Ik weet het niet zeker, maar wellicht dat Tidy het kan: http://pecl.php.net/package/tidy

Edit: en aangezien XHTML ook XML is kan het anders vast ook wel met http://pear.php.net/package/XML_Beautifier

[ Voor 29% gewijzigd door vargo op 29-06-2004 11:47 ]


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
offtopic:
@TumTum: als je dan toch met een strict doctype werkt, kun je beter omit-xml-declaration="yes" zeggen om IE6 niet in quirks-mode te laten schieten.

Acties:
  • 0 Henk 'm!

Verwijderd

Grappig, met <xsl:output indent="yes"> genereer je de juiste hoeveelheid spaties op de juiste plaats en met <xsl:strip-space elements="*"/> smijt je ze er daarna weer uit ...

Of is het je browser die de spaties onderdrukt?

Bekijk het resutlaat van je transformatie eens met Notepad en zonder het StripSpace element.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

saghws:
Grappig, met <xsl:output indent="yes"> genereer je de juiste hoeveelheid spaties op de juiste plaats en met <xsl:strip-space elements="*"/> smijt je ze er daarna weer uit
Dat ligt er natuurlijk maar net aan wat de XSLT processor de voorrang geeft. Vermoedelijk wordt het xsl:output element als laatste afgehandeld, maar ik weet niet zeker of dat gespecificeerd is. Dat zou je eens na moeten zoeken op w3.org

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03 09:11
Genoil schreef op 29 juni 2004 @ 12:17:
offtopic:
@TumTum: als je dan toch met een strict doctype werkt, kun je beter omit-xml-declaration="yes" zeggen om IE6 niet in quirks-mode te laten schieten.
Bij mij krijgt IE geen XHTML, maar gewoon HTML 4.01 (ik parse de XHTML nog eens met een XSLT), omdat IE XHTML ziet als tag soup. Echter, geef ik hem bij HTML 4.01 nog steeds een comment, omdat ik graag wil dat hij in quirks mode schiet, aangezien dit makkelijker te stylen is (omdat IE 5.X ook gebruik maakt van dat box model).

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
TumTum schreef op 29 juni 2004 @ 14:16:
[...]

Bij mij krijgt IE geen XHTML, maar gewoon HTML 4.01 (ik parse de XHTML nog eens met een XSLT), omdat IE XHTML ziet als tag soup. Echter, geef ik hem bij HTML 4.01 nog steeds een comment, omdat ik graag wil dat hij in quirks mode schiet, aangezien dit makkelijker te stylen is (omdat IE 5.X ook gebruik maakt van dat box model).
Kijk, zolang je je keuze degelijk motiveert hoor je mij niet klagen ;)

Alleen dat "IE XHTML ziet als tag soup" heb ik zelf geen problemen mee (of heb je het over IE4?). Zelf werk ik liever in W3C-modus+hacks vanwege o.m. Apple Safari's gebrek aan CSS:box-sizing. Maargoed die discussie is meer voor over de schutting :)

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 18:28

alienfruit

the alien you never expected

Topicstarter
Het probleem ligt blijkbaar de extensie zelf, want als ik de stand-alone versie van libxslt gebruik wordt de output wel ge-ident. Hetzelfde geld als ik de Sabltron xslt processor gebruik. Alleen de versie van php_domxml dus niet :( Iemand een suggestie? :?

Acties:
  • 0 Henk 'm!

Verwijderd

Uit het grote kabouterboek:

xls:output indent="yes"

"the XSLT processor is not obliged to respect this request"

Blijkbaar hadden de ontwikkelaars van een van de processors die jij gebruikt, even geen zin om dit er in te stoppen.

Acties:
  • 0 Henk 'm!

Verwijderd

Gelukkig is het niet moeilijk om zelf een stylesheet te schrijven voor indenten ...

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 18:28

alienfruit

the alien you never expected

Topicstarter
Ooh, maar het gekke is dus dat de library die ze gebruiken in die php module het zelf wel honoreerd, alleen de versie in de php module niet. Beetje gek ;)

Maar ik zal eens kijken hoe ik zo'n stylehsheet maak voor het identen, als jij suggesties hebt waar ik moet zoeken dan hoor ik het graag.

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 18:28

alienfruit

the alien you never expected

Topicstarter
Zojuist ook getest met PHP v5.0 RC3 en daar is het resultaat ook zoals verwacht :( Snap er niks meer van :'(

Acties:
  • 0 Henk 'm!

Verwijderd

Neem de gegenereerde XHTML en laat er de volgende StyleSheet overheen denderen:

<xsl:stylesheet ...>
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>

Dan krijg je dezelfde XHTML terug, maar dan indented.

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 18:28

alienfruit

the alien you never expected

Topicstarter
Uiteindelik bleek het probleem te liggen aan de aanroep:

code:
1
$result->result_dump_mem();


in plaats van onderstaande code:

code:
1
$result->dump_mem();
Pagina: 1