[XML/XSL] xsl stylesheets on the fly wijzigen

Pagina: 1
Acties:

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 21:04

Apache

amateur software devver

Topicstarter
K'ben vandaag wat aan het experimenteren geslaagd met XML/XSL.

Nu heb ik in de XML alle gegevens die ik nodig heb,
maar ik zou daar graag dynamisch andere XSL stylesheets voor loaden.

Eigenlijk komt het neer op wat deze user ook vraagt:
http://www.biglist.com/li...ives/199908/msg00064.html

K'heb een tijdje rond gekeken, maar daar vertrokken ze vanuit html pages waarin ze zelf met javascript hun transformaties manueel gingen uitvoeren.

Is er een manier om je document te manipuleren, een andere xsl stylesheet loaden op een niet omslachtige cross-browser methode?

Hier een voorbeeld van wat ik bedoel: http://users.pandora.be/depot/pa/albums.xml

Normaal zou ik rondkijken op got maar de search is brak.

If it ain't broken it doesn't have enough features


  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Dus je wil deze regel
code:
1
<?xml-stylesheet type="text/xsl" href="xsl/testlist.xsl"?>
wijzigen? Dat is alles?

Search doet het wel maar dan moet je eerst een topic selecteren en daarna deselecteren.

[ Voor 37% gewijzigd door seweso op 09-04-2004 19:30 ]

seweso's blog


  • Apache
  • Registratie: Juli 2000
  • Laatst online: 21:04

Apache

amateur software devver

Topicstarter
Ja, dat wil ik wijzigen, sterker nog slecht het href attribuut ...

die regel maakt geen deel uit van het DOM of ik moet me stevig vergissen

<?xml-stylesheet type="text/xsl" href="xsl/testlist.xsl" id="test"?>

met zoiets:
onclick='alert(document.getElementById("test").href)'

Gaat niet werken.

natuurlijk kan ik de xml meerdere keren op de server plaatsen met andere stylesheets en linken met trandionele links, das eigenlijk niet de bedoeling, ik wil in 1 pagina, zonder verder serverhits van XSL sheet wisselen om de data op andere manieren weer te geven.

Er draaien geen serverside talen op de server, daarom dat ik hier naar aan het kijken was, ik kan ze lokaal transformeren & laten uploaden maar dan kan ik net zo goed een traditionele template engine nemen, html caches daarvan nemen en uploaden.

Als dit niet mogelijk is denk ik dat ik voor de laatste oplossing ga, al dan niet XML/XSL gebruiken om die gegenereerde output door te sturen naar de server.

Maar dan lijkt de stap van db->xml me nogal overbodig zonder extra voordelen.

If it ain't broken it doesn't have enough features


  • Johnny
  • Registratie: December 2001
  • Laatst online: 26-05 10:04

Johnny

ondergewaardeerde internetguru

javascript in XML gaat volgens mij inderdaad niet werken.

javascript in XSL wel.

Dus wat je wel zou kunnen doen is alle data uit de XML met XSL laden, en dan vervolgens met CSS de opmaak doen, je kunt namelijk wel makkelijk clientside de CSS veranderen.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je kunt binnen XSLT wel gebruik maken van variablen die van buiten af zijn ingesteld. Op basis daarvan zou je in XSLT-regel wel een ander alternatief kunnen kiezen. Maar dan is het de vraag hoe je dus van buiten af die variablen kan instellen als je alles client-side wilt doen.

voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" indent="yes"/>

<xsl:param name="file" select="'default value'"/>

<xsl:template match="vraag">
    <h3>Vraag</h3>
    <p><xsl:value-of select="tekst"/></p>
            
    <xsl:if test="url">
        <p>
            <xsl:element name="a">
                <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>
                <xsl:attribute name="target">_blank</xsl:attribute>
                <xsl:attribute name="title">Uitleg over deze vraag</xsl:attribute>
                [img]"images/help24_h.bmp"[/img]
                    Uitleg
            </xsl:element>
        </p>
    </xsl:if>
    <xsl:apply-templates select="antwoorden"/>
    
    <a href="index.html" title="terug noar huus">
        [img]"images/home.bmp"[/img]
        Home
    </a>
    
</xsl:template>

<xsl:template match="antwoorden">
    <h3>Antwoorden</h3>
    <table border="0" width="90%">
        <xsl:for-each select="antwoord">
            <tr>
                <td width="30">
                    <xsl:if test="url">
                        <xsl:element name="a">
                            <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>
                            <xsl:attribute name="target">_blank</xsl:attribute>
                            <xsl:attribute name="title">Uitleg over dit antwoord</xsl:attribute>
                            [img]"images/help24_h.bmp"[/img]
                        </xsl:element>
                    </xsl:if>
                </td>
                <td>
                    <xsl:element name="a">
                        <xsl:attribute name="href">
controller?command=showboom&amp;file=<xsl:value-of select="$file"/>


&amp;antwoordid=<xsl:value-of select="@id"/></xsl:attribute>
                        <xsl:attribute name="title">Een antwoord op een vraag.</xsl:attribute>
                        <xsl:value-of select="tekst"/>
                    </xsl:element>
                </td>
            </tr>
        </xsl:for-each>
    </table>
</xsl:template>

<xsl:template match="antwoord">
    <xsl:if test="conclusietekst">
        <h3>Conclusie</h3>
        <xsl:value-of select="conclusietekst"/>
    </xsl:if>

    <xsl:if test="vraag">
        <h3>Volgende vraag</h3>
        <p><xsl:value-of select="vraag/tekst"/></p>
        <xsl:if test="vraag/url">
            <p>
                <xsl:element name="a">
                    <xsl:attribute name="href"><xsl:value-of select="vraag/url"/></xsl:attribute>
                    <xsl:attribute name="target">_blank</xsl:attribute>
                    <xsl:attribute name="title">Uitleg over deze vraag</xsl:attribute>
                    [img]"images/help24_h.bmp"[/img]
                    Uitleg
                </xsl:element>
            </p>
        </xsl:if>
        <xsl:apply-templates select="vraag/antwoorden"/>
    </xsl:if>
            
    <p>
        <xsl:element name="a">
            <xsl:attribute name="href">controller?command=showboom&amp;file=<xsl:value-of select="$file"/></xsl:attribute>
            <xsl:attribute name="title">Ga terug naar de 1e vraag</xsl:attribute>
            [img]"images/arrowup_blue24_h.bmp"[/img]
            Terug naar de 1e vraag
        </xsl:element>
    </p>
</xsl:template>


</xsl:stylesheet>


Op regel 6 staat dus een variable declaratie:
<xsl:param name="file" select="'default value'"/>
Die dus van buiten af ingesteld kan worden.

Mijn advies is trouwens om alle HTML van te voren te genereren en dat op je site te plaatsen. Dan ben je niet meer afhankelijk van de gebruiker of zijn browser wel geavanceerd genoeg is. Ik gebruik trouwens ANT om dit proces te automatiseren:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<project name="Site" default="transform">

    <property name="site"   value="site"/>

    <target name="transform">
        
        <style  in="menusystem.xml" 
                out="menusystem.html" 
                style="menusystem.xsl"/>
        
        <copy   file="menusystem.html"
                todir="${site}"/>

    </target>
    
</project>


Nu hoef ik alleen nog maar in een console in te typen: ANT. En mijn site wordt gegenereerd. Super!

[edit]
ff de layout ontfucked.

[ Voor 166% gewijzigd door Alarmnummer op 10-04-2004 12:56 ]


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Hier staat uitgelegd hoe je met internet explorer vanuit javascript xml/xsl tranformaties kunt doen:

http://msdn.microsoft.com...k/htm/dom_howdoi_8xgt.asp

Met Moz/FF kan het ook maar dan weer net iets anders
Pagina: 1