Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

XML XSL:output doctype xhtml1.1 ?

paetje
9 antwoorden
  • Geachte heren/Dames,

    Ik ben bezig mijn html gebaseerde site omtezetten naar xml, nu is dat opzich niet zo spannend.
    Dit gaat allemaal prima, ik output nu xml files en roep de betreffende xsl file aan.
    Ook dit gaat prima, alleen nu gaat het fout in de xsl file.
    ik wil in de xsl de doctype meegeven, met 'xsl:output' dit gaat overigens bijna altijd goed.
    Ik wil als doctype xhtml1.1 meegeven. ( zie code )
    [code:1:9e61b13b08]
    <xsl:output method="xml" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" doctype-public="-//W3C//DTD XHTML 1.1//EN" indent="yes"/>
    [/code:1:9e61b13b08]
    Helaas gaat dit niet zoals gewenst, bij elke browser werkt het prima en ziet alles eruit na behoren.
    Behalve! u raad het all internet explorer, deze blaat de volgende error:
    [code:1:9e61b13b08]
    Parameter entity must be defined before it is used. Error processing resource 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd…

    %xhtml-prefw-redecl.mod;
    [/code:1:9e61b13b08]
    Na wat google werk kom ik tot de magere conclusie dat i-e problemen heeft met xsl en het processen van xhtml1.1.
    Na getest te hebben met 1.0 kom ik idd tot de conclusie dat 1.0 prima werkt, helaas is het zo dat mijn site dan voor geen meter meer klopt.

    Nu heb ik 2 oplossingen:
    1) Jullie hebben goede sugesties om dit vervelende probleempje te fixen.
    2) Ik moet mijn css compatible maken met xhtml1.0, wat ik in principe niet wil.


    Heeft iemand hier dus een oplossing voor? mvg,
    Arno
  • [quote:174050eddf="_arno_"]Ik ben bezig mijn html gebaseerde site omtezetten naar xml[/quote:174050eddf]Waarom heb je dit gedaan? Leerdoeleinden?

    [quote:174050eddf="_arno_"]
    1) Jullie hebben goede sugesties om dit vervelende probleempje te fixen.[/quote:174050eddf]De XSLT-processing niet door de browser laten uitvoeren. Dit geeft een afhankelijkheid en een mogelijk security-issue. Opera bijv.ondersteunt (nog) geen XLST. Door serverside processing kun je ook de USER AGENT als parameter meegeven, waardoor je voor verschillende browsers, verschillende XHTML kan laten genereren.
    [quote:174050eddf="_arno_"]
    2) Ik moet mijn css compatible maken met xhtml1.0, wat ik in principe niet wil.[/quote:174050eddf]Waarom moet dit? 1.0 en 1.1 zijn in syntax gelijk, tenzij je het met een andere mimetype gaat serveren (als xml), maar dan werkt het weer niet in IE.
  • [quote:e647225401="Remytje"]Waarom heb je dit gedaan? Leerdoeleinden?[/quote:e647225401]
    Ja voornamelijk, ik was nog vrij onbekend met xsl.

    [quote:e647225401="Remytje"]
    De XSLT-processing niet door de browser laten uitvoeren. Dit geeft een afhankelijkheid en een mogelijk security-issue. Opera bijv.ondersteunt (nog) geen XLST. Door serverside processing kun je ook de USER AGENT als parameter meegeven, waardoor je voor verschillende browsers, verschillende XHTML kan laten genereren.
    [/quote:e647225401]
    Heb even gekeken, hiervoor heb je dus aparte xslt library voor nodig ( iig http://nl3.php.net/manual/en
    ef.xslt.php ).


    Ik gebruikte al het volgende ( http://nl3.php.net/manual/en
    ef.xsl.php ), waar ik nog niet precies weet hoe dat in elkaar zit.
    Maar het onderstaande output iniedergeval het probleem wat ik in mijn start plaatste.
    [code:1:e647225401]
    // Load the XML source
    $xmlObj = new DOMDocument;

    $xmlObj->loadXML($xml);

    $xsl = new DOMDocument;
    $xsl->load('page.xsl');

    // Configure the transformer
    $proc = new XSLTProcessor;
    $proc->importStyleSheet($xsl); // attach the xsl rules

    echo $proc->transformToXML($xmlObj);[/code:1:e647225401]

  • ok, je gebruikt dan al serverside-processing. Maar dan heeft het toch niets met XSLT te maken.

    Ik snap nu ook de error in je eerste post: dit is een xml-parsing fout van IE. Waarschijnlijk de xml-decleration weghalen, maar ik zou zoiezo het niet als xml aanbieden aan IE (google hier maar eens op).
  • Is het niet mogelijk om de XSL als HTML weer te geven. Dan snapt IE het wel, maar XSL(T) vereist toch een XHTML structuur. Dus werk je volgens XHTML omdat je XSL anders niet wordt ondersteund maar de browser interperteerd dit als "gewone" HTML.

    zelf begin ik standaard met het volgende:
    [code:1:098ad41cf9]<?xml version="1.0" encoding="ISO-8859-1" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method='html' version='1.0' encoding="ISO-8859-1" indent='yes'/>[/code:1:098ad41cf9]
    Als je nu gewoon deze methode aanhoud en als IE beter meewerkt aan XSL gewoon de declaratie wijzigd moet je er volgens mij zijn.

    Ik hoop dat het voor je werkt. :wink:
  • blijkbaar had ik met het doctype 1.0 meegeven de versie van de xsl:output vergeten mee te geven ( version="1.0" ), dan werkt het blijkbaar wel goed.

    Trouwens ik heb ook wat html in de code meegegeven bv links in de content die displayed moet worden.
    Helaas neem hij deze html code niet mee, is hier een oplossing voor ?
  • Als deze in XSL staan kun je gewoon XHTML gebruiken voor een link. Maar aangezien je alle content uit XML haalt schat ik dat je de link ook hier wilt hebben.

    Dit zal helaas niet gaan… ofwel de link zelf niet maar wel een aanduiding. Je geeft bv aan <link>tekst</link> en laat deze door je XSL vertalen. Dit is de transform functie die je aan XSL kunt toekennen.

    zie voorbeeld hieronder:
    [code:1:253e62cebf]</xsl:template>
    <xsl:template match="link">
    <span class="link">
    <a href="pagina.xml"><xsl:value-of select="."/></a>
    </span>
    </xsl:template>
    </xsl:stylesheet>[/code:1:253e62cebf]
    Dit komt onder het stukje "HTML" structuur van je pagina te staan

    het "." wil zeggen dat de tekst wordt overgenomen van de waarde die jij in <link>tekst(".";)</link> hebt gezet.
  • hoe roep ik die template match op ?

    heb nu het volgende:
    [code:1:16b70fcbff]
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
    <xsl:template match="/">
    Blabla veel html onzin
    </xsl:template>
    <xsl:template match="link">
    <span class="link">
    <a href="pagina.xml">test</a>
    </span>
    </xsl:template>
    </xsl:stylesheet>
    [/code:1:16b70fcbff]
    en in xml
    [code:1:16b70fcbff]
    - <document>
    <link>aaa</link>
    </document>
    [/code:1:16b70fcbff]

    Dit is overigens om te testen

    Dus als ik je goed begrijp kun je onder geen beding html code in je xml zetten.

    Opzich zou het wel logisch zijn maar enigsinds onpraktisch, bv als je plaatjes in je content heb?
  • apply-templates \ call-template…

    voor een goed tutorial zie http://www.zvon.org/xxl/XSLTutorial/Books/Book1/index.html

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.