Toon posts:

[xml/xsl] Volgorde aanhouden.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Op het moment dat je css op xml gaat toepassen, kan je gewoon mooi:
code:
1
2
3
4
5
<content>
  <p>text<p>
  <p2>andere text</p2>
  <p>text<p>
</content>
verschillende tags gebruiken die gewoon netjes onder elkaar komen.

maar ik ben nu xsl gaan gebruiken.
en als ik apply-templates gebruik om de verschillende tags (p en p2) een andere style te geven, dan komen ze niet meer op volgorde te staan, maar eerst alle p's en daarna alle p2's

en als ik alleen value-of select="content" gebruik dan komen de tags die erin staan niet mee.

hoe kan ik ervoor zorgen dat de volgorde wordt aangehouden en de bepaalde styles van de tags kan veranderen?

greetz,
dexus

Verwijderd

XML:
1
2
3
4
5
<xsl:for-each select="content/*">
     <p>
       <xsl:value-of select="."/>
     </p>                                
</xsl:for-each> 


Dat zou moeten werken dacht ik zo, kijk anders ook nog even naar de xsl:sort mogelijjkheden.

[ Voor 17% gewijzigd door Verwijderd op 15-11-2004 17:09 ]


Verwijderd

Topicstarter
k, ze komen onder elkaar,
maar het grootste probleem is dat de p een andere style moet hebben dan de p2.

heb wat over sort gezocht, en daar stond: Sorts the output.
dus op volgorde van de value van de elementen. :|

Verwijderd

code:
1
2
3
4
5
6
7
8
<xsl:for-each select="content/*">  
  <p class="p">
     <xsl:value-of select="p"/>
  </p>
  <p class="p2">
     <xsl:value-of select="p2"/>
  </p>                                        
</xsl:for-each>


Weet ff niet of dit kan, probeer maar even, anders kan je ook nog evt. met een xsl:choose constructie gaan werken.

EDIT:
nog een mogelijkheid:
code:
1
2
3
4
5
6
7
<xsl:template match="content/p">
 <p class="p"><xsl:value-of select="."/></p>
</xsl:template>

<xsl:template match="content/p2">
 <p class="p2"><xsl:value-of select="."/></p>
</xsl:template>

[ Voor 39% gewijzigd door Verwijderd op 15-11-2004 17:59 ]


  • Onno
  • Registratie: Juni 1999
  • Niet online
Verwijderd schreef op maandag 15 november 2004 @ 16:55:
Op het moment dat je css op xml gaat toepassen, kan je gewoon mooi:
code:
1
2
3
4
5
<content>
  <p>text<p>
  <p2>andere text</p2>
  <p>text<p>
</content>
verschillende tags gebruiken die gewoon netjes onder elkaar komen.

maar ik ben nu xsl gaan gebruiken.
en als ik apply-templates gebruik om de verschillende tags (p en p2) een andere style te geven, dan komen ze niet meer op volgorde te staan, maar eerst alle p's en daarna alle p2's
Hoe gebruik jij apply-templates?

Als je iets als
code:
1
2
3
4
5
6
7
8
9
10
11
<xsl:template match="content">
  <xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="p">
  <!-- doe iets -->
</xsl:template>

<xsl:template match="p2">
  <!-- doe iets anders -->
</xsl:template>
doet, blijft de volgorde echt wel hetzelfde hoor.

(je voorbeeld XML klopt trouwens niet..)

Verwijderd

Topicstarter
tnx, het werkt.

ik selecteer ook nog iets bij apply-templates, nooit aan gedacht om * te gebruiken. 8)7

ow en die xml, dat is maar een voorbeeld.
ik zie nu ook dat ik de p niet afgesloten heb.

anyway beide badankt voor de hulp.

[ Voor 84% gewijzigd door Verwijderd op 15-11-2004 18:10 ]


  • Onno
  • Registratie: Juni 1999
  • Niet online
[quote]Verwijderd schreef op maandag 15 november 2004 @ 18:05:
om het dan te kunnen selecteren moet je eerst terug, omdat je de p of p2 al met * selecteert.[/quote]
Geen idee wat je bedoelt, maar het klopt niet. In wat ik net gepost heb kun je gewoon <p class="p"><xsl:value-of select="."/></p> in de template voor p zetten, met als resultaat precies wat jij wilt.
Verwijderd schreef op maandag 15 november 2004 @ 18:05:
ik selecteer ook nog iets bij apply-templates, nooit aan gedacht om * te gebruiken. 8)7
Als je alleen die twee elementen wilt selecteren had je select="p|p2" kunnen gebruiken.

[ Voor 32% gewijzigd door Onno op 15-11-2004 18:13 ]


  • grhmpf
  • Registratie: December 2000
  • Laatst online: 29-05-2022

grhmpf

Android <3

Ik zou nog een keer de reply van Onno doorlezen want volgens mij snap je xsl niet helemaal als je for-each gaat gebruiken. Dat heb je eigenlijk alleen maar nodig als je bijv de oneven rijen van een tabel een ander kleurtje wil geven. Wat je waarschijnlijk fout doet is dat je <xsl:apply-templates select="p"/> en dan <xsl:apply-templates select="p2"/> doet. Dan krijg je inderdaad eerst alle "p" en dan alle "p2". Je zou (zoals Onno al opmerkt) beter apply-templates op je "content" node kunnen doen en dan voor alle sub elementen een template.

Verwijderd

Topicstarter
dat was idd wat ik had geprobeert.
en nu gebruik ik:
code:
1
<xsl:apply-templates select="scripts/*"/>
en dat werkt dus goed. :*)
Pagina: 1