[xslt] xml params gebruiken in html properties

Pagina: 1
Acties:

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Zie de topictitel :)

Ik heb deze xml:
code:
1
2
3
4
5
<directories>
  <javascript>includes/javascript/</javascript> 
  <css>includes/css/</css> 
  <images>images/</images> 
</directories>

Nu wil ik in de html die directories gebruiken bij de output. Dus dan moet het er zo komen uit te zien:
code:
1
<link type="text/css" rel="stylesheet" rev="stylesheet" href="includes/css/main.css" />

Maar hoe krijg ik nou dat variabele gedeelte van die paths netjes met xslt in de output, en dat main.css er ook nog achter wordt gezet :?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Dasniezo moeilijk:
code:
1
2
<link type="text/css" rel="stylesheet" rev="stylesheet"
    href="{/directories/css/text()}main.css"/>

Je kunt in attributen dus gewoon tussen { ... } een XPath expressie opnemen. Overigens kan je ook xsl:attribute gebruiken, maar met de { ... } constructie blijft je code een stuk duidelijker :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Damn, das simpel :)
Blijkbaar niet goed gekeken in de XSLT specs |:(

Heel hartelijk bedankt :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: Damn, das simpel :)
Tja, XSLT he? ;) .
Blijkbaar niet goed gekeken in de XSLT specs |:(
Als je daarin kijkt voor informatie kan ik me voorstellen dat je er niet uit kwam :o .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Op zaterdag 16 februari 2002 22:21 schreef mbravenboer het volgende:
Als je daarin kijkt voor informatie kan ik me voorstellen dat je er niet uit kwam :o .
Das niet helemaal waar, ik had gewoon goed moeten kijken in de index: http://www.w3.org/TR/xslt#attribute-value-templates

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: Das niet helemaal waar
Mwah, als je dit niet wist (en dus ook niet hoe je dit met xsl:attribute had kunnen doen, wat gewoon basic XSLT zou zijn) geeft dat eigenlijk aan dat de standaard nog te gedetailleerd en technisch is voor jou. Een goede tutorial is dan wellicht beter om ernaast te hebben :) .

Zelf grijp ik alleen naar de standaard als ik echt even moet uitzoeken hoe iets exact in elkaar zit. Voor leren werken met XSLT is het vrij ongeschikt...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Ik heb wel een basic XSLT tutor hier naast me liggen (naast me in de zin van geopend in IE) maar een goede tutorial daartussenin (tussen niveau van w3schools en specs) ontbreekt me eigenlijk nog :{.

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

xfront.com

Doet iets met Cloud (MS/IBM)


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: Ik heb wel een basic XSLT tutor hier naast me liggen (naast me in de zin van geopend in IE) maar een goede tutorial daartussenin (tussen niveau van w3schools en specs) ontbreekt me eigenlijk nog :{.
Check de powerpoint slides in dit pakketje:
http://www.xfront.com/xsl.html
Sublieme stuff.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
D2k: xfront.com
Je haalt me de woorden uit de mond ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

mbravenboer: Je haalt me de woorden uit de mond ;) .
ik leer snel *D ;)

Doet iets met Cloud (MS/IBM)


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Btw, dit geeft me een mooie gelegenheid om nog ff op een volgend probleem in dezelfde situatie in te gaan.

Stel dat ik nou in dat xml gedeelte meerdere keren hetzelfde definieer.

Dus:
code:
1
2
3
4
5
<directories>
  <css>includes/css/bla.css</css> 
  <css>includes/css/twee.css</css> 
  <css>includes/css/drie.css</css> 
</directories>

Dit is maar even een voorbeeldje. Hier zou ik dan waarschijnlijk een aparte template match voor moeten maken (aangezien volgens de reacties die ik hier lees een for-each constructie minder elegant( :P ) is).

Maar hoe kan ik ze nou zegmaar genummerd uitlezen, want hij zou nu steeds de eerste pakken waarschijnlijk :?

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
D2k: xfront.com
Ja die heb ik ook gedownload, een poos terug al, maar die moet ik nog kijken. :) Ik heb trouwens een lichte voorkeur voor een html bestand, dus niet powerpoint.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: Maar hoe kan ik ze nou zegmaar genummerd uitlezen, want hij zou nu steeds de eerste pakken waarschijnlijk :?
Hum... ik begrijp niet wat je bedoelt... Kan je 'genummerd' uitlezen beter uitleggen? (Misschien even aangeven wat eruit moet komen?)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: Ik heb trouwens een lichte voorkeur voor een html bestand, dus niet powerpoint.
Check de inhoud maar eens :+ . Ik werk op Linux en geef zelfs nog de voorkeur aan deze PowerPoint slides... zeker de moeite waard.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Ok, ik krijg zometeen deze xml input:
code:
1
2
3
4
5
<directories>
  <javascript>includes/javascript/</javascript> 
  <css>includes/css/</css> 
  <images>images/</images> 
</directories>

En daarnaast ook nog deze xml input:
code:
1
2
3
4
5
6
<theme>
  <cssfile>main.css</cssfile>
  <cssfile>index.css</cssfile>
  <javascriptfile>main.js</javascriptfile>
  <javascriptfile>index.js</javascriptfile>
</theme>

En dan moet dus voor elke tag "cssfile" de regel
code:
1
<link type="text/css" rel="stylesheet" rev="stylesheet" href="{dorum/directories/css/text()}VARIABEL" />

worden uitgepoept. Maar wat moet ik nou neerzetten op de plaats van VARIABEL ?

Laten we even veronderstellen dat ik toch een for-each constructie ga gebruiken voorlopig.

Dus dan krijg ik zoiets:
code:
1
2
3
<xsl:for-earch select="cssfile">
  <link type="text/css" rel="stylesheet" rev="stylesheet" href="{dorum/directories/css/text()}VARIABEL" />
</xsl:for-each>

Maar dan weet ik nog steeds niet wat ik dus bij variabel in moet vullen, want ik heb hier geen vaste plaats waar de data vandaan komt, en het moet toch in de tag :).

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: En dan moet dus voor elke tag "cssfile" de regel <knip> worden uitgepoept. Maar wat moet ik nou neerzetten op de plaats van VARIABEL ?
Tja, dat roept om een template voor cssfile :) . In die template kan je dan als VARIABEL de text van deze cssfile node gebruiken :) .
Laten we even veronderstellen dat ik toch een for-each constructie ga gebruiken voorlopig.
Daarmee maak je het jezelf alleen maar onnnodig lastig... Je kan veel beter in de head van je html een apply-templates doen op alle cssfiles.
Maar dan weet ik nog steeds niet wat ik dus bij variabel in moet vullen, want ik heb hier geen vaste plaats waar de data vandaan komt, en het moet toch in de tag :).
Daar zou je de current() node voor kunnen gebruiken, maar dat is dus helemaal niet nodig :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Ok, dus ik moet ff een template maken voor alle cssfile tags (waarvoor ik trouwens de php-code nog niet heb geschreven ;) ) en dan kan ik zeker wel gewoon die attribuut dingen gebruiken ?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: en dan kan ik zeker wel gewoon die attribuut dingen gebruiken ?
Uiteraard, alleen dan is de XPath is een stukje kleiner omdat je al in de goede node zit... :)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
mbravenboer:
Uiteraard, alleen dan is de XPath is een stukje kleiner omdat je al in de goede node zit... :)
Leg dit eens uit, want ik snap het niet helemaal :'( ;)
Ik weet wel dat XPath een onderdeel is van XSL, en dat de goede node natuurlijk dorum/theme/ is, maar volgens mij mis ik toch nog net de boot..

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Wat ik zelf wel handig vind is een quick reference. Hier te halen:
http://www.mulberrytech.com/quickref/XSLTquickref.pdf

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: Leg dit eens uit, want ik snap het niet helemaal :'( ;). Ik weet wel dat XPath een onderdeel is van XSL, en dat de goede node natuurlijk dorum/theme/ is, maar volgens mij mis ik toch nog net de boot..
Alles wat je opgeeft in een select, een match of in attribuut tussen { ..} is een XPath expressie. In mijn eerste oplossing gaf ik dit:
code:
1
2
<link type="text/css" rel="stylesheet" rev="stylesheet"
    href="{/directories/cssfile/text()}main.css"/>

Dit geeft dus aan de je ten opzichte van de root het path directories/css wilt volgen, en daarvan de text node wilt hebben.

Als je een template schrijft voor cssfile is je huidige node 'cssfile' en moet je je XPath expressie relatef maken ten opzichte van die node:
code:
1
2
<link type="text/css" rel="stylesheet" rev="stylesheet"
    href="{text()}main.css"/>

Simpel dus :) .

Ik zou even goed de slides van xfront doornemen. Er word je dan heel veel duidelijk. Het is in feite de enige documentatie van XSLT die ik zelf ooit doorgenomen heb ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Op zaterdag 16 februari 2002 23:05 schreef Orphix het volgende:
Wat ik zelf wel handig vind is een quick reference. Hier te halen:
http://www.mulberrytech.com/quickref/XSLTquickref.pdf
Eej das echt een goede!! :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Orphix: Wat ik zelf wel handig vind is een quick reference.
Idd, een reference bij de hand is onmisbaar, zoals bij elke standaard en taal :) .

Zelf gebruik de references van http://www.zvon.org . Dit is een HTML pagina met frames inclusief wat uitleg bij de functies en elementen + links naar de standaard... Werkt wel aardig :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Ik kan inmiddels mededelen dat het allemaal netjes is gelukt met ff een proefscriptje. Ga het nu / morgen ff allemaal netjes afwerken en de juiste php-generatie erbij schrijven.

Meneer mbravenboer (xml-held) bedankt! :)

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
kick

Zonde om een nieuwe topic te openen, dus dan hier maar verder :). Eens kijken of mbravenboer dit probleem ook kan oplossen.

Het moge inmiddels duidelijk zijn dat ik een forum in XML aan het maken ben. Nou heb ik een tag <categories>, daarin staan meerdere tags <category> en onder elke van die tags vind je weer 1 of meerdere <forum> tags. Dus het is netjes genest.

Ik heb nu dit:
code:
1
2
3
4
<xsl:template match="/dorum/content/categories/category">
  category();
  <xsl:apply-templates select="/dorum/content/categories/category/forum" />
</xsl:template>

En die roept dus weer dit aan:
code:
1
2
3
<xsl:template match="/dorum/content/categories/category/forum">
  forum();
</xsl:template>

En dan gaat het mis. Hij pakt nu namelijk ALLE <forum> tags, dus ook degenen die NIET onder de de parent staan die op dat moment wordt aangeroepen. Hoe kan ik nou valideren of ie eronder staat of niet, want ik heb geen zin om ID's en dat soort overbodige rommel in te bouwen :)

P.s. let niet op de javascript functies, dat werkt prima :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Dat lijkt mij wel erg duidelijk.... lees maar eens mijn eerdere post of relative XPaths door. Ook hier moet je je XPath weer relatief maken. Het gedrag van XSLT is hier volkomen logisch: het doet precies wat jij opgeeft :P .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Hmmmja, moet ik dan wel met if-constructies werken of is er nog een betere oplossing :?

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
Ok, laat maar |:(
Het is al gelukt |:(

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: Hmmmja, moet ik dan wel met if-constructies werken?
Nee hoor, dit heeft met iets heel anders te maken. Je moet gewoon ongeveer 90% van je XPath afknippen... Staat allemaal vrij duidelijk in de tutorials denk ik.. ;)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:55
mbravenboer:
Nee hoor, dit heeft met iets heel anders te maken. Je moet gewoon ongeveer 90% van je XPath afknippen... Staat allemaal vrij duidelijk in de tutorials denk ik.. ;)
Ja hehehe, is me nu dus al gelukt :)
Pagina: 1