Toon posts:

[xsl] meerdere zaken combineren in blaat[xxx]

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik weet dat de topic titel vaag is, maar ik kan het niet duidelijker omschrijven :P

Ik heb de volgende xsl:

item[position() mod 2 = 1]

Maar ik wel ook een selectie maken op item, namelijk alleen de items waar @selected "true" is, normaliter zou ik dit doen met:

item[@selected='true']

Nu de vraag: is het mogelijk om deze twee te combineren? En zo ja... hoe :? Ik heb namelijk van alles geprobeerd, maar voornamelijk op de gok, omdat het errug moeilijk is om een string te maken om mee te zoeken op Google ofzo (komt nix zinnigs uit, plus ik weet niet waar ik exact op moet zoeken :P).

Verwijderd

Topicstarter
Nogmaals de GoT'ers ermee lastig vallen, want ik kom er niet uit :)

Ik heb dus een for-each loop om de xml data in een tabel te zetten, en deze ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
<table>
   <xsl:for-each select="/page/content/item/item[position() mod 2 = 1]">
      <tr>
         <xsl:for-each select=" . | following-sibling::*[position() &lt; 2]">
            <td><xsl:value-of select="view[@id='1']/item"/></td>
         </xsl:for-each>
      </tr>
   </xsl:for-each>
</table>


Wat ik nu dus wil is dat 'ie alleen door de nodes loopt (en in een <td> zet) waarbij /page/content/item/item/view[@id='1'] niet leeg is (waarbij de <view id="1"> dus inhoud bevat en niet <view id="1"/> is.

Een <xsl:if> binnen de loop plaatsen is geen optie, want dat wordt er gewoon een lege <td> gemaakt, en dat is niet de bedoeling uiteraard.

Nou heb ik al vanalles geprobeerd, maar ik krijg het niet werkend. Zou iemand zo goed willen zijn om me in de juiste richting te sturen?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Allereerst moet je stoppen met dat zware for-each gebruik. Het valt zo wel op te lossen, maar je code wordt lelijk en lastig uit te breiden. Templates solve all your problems. Meerdere templates gebruiken maakt je code duidelijker en makkelijker aan te passen.

Schets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<xsl:template match="...">
  <table>
    <xsl:apply-templates select="/page/content/item/item[position() mod 2 = 1]"/>
  </table>
</xsl:template>
 
<xsl:template match="item">
  <tr>
    <xsl:apply-templates select=" . | following-sibling::*[position() &lt; 2]">
  </tr>
</xsl:template>
 
<xsl:template match="view[ count( ... )  ... ]">
  <td><xsl:value-of select="view[@id='1']/item"/></td>
</xsl:template>
 
<xsl:template match="view[ ... ]">
  ...
</xsl:template>

[ Voor 17% gewijzigd door mbravenboer op 24-09-2003 10:58 ]

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


Verwijderd

Maar doet jouw XSL in principe niet exact hetzelfde, mbravenboer?

Als ik het zo bekijk is dit ook geen oplossing voor de selectie van nodes die nodig is.

  • udenjpg
  • Registratie: November 2000
  • Niet online

udenjpg

C8H10N4O2

mbravenboer geeft toch het antwoord in zijn eerste reply, als je dat stuk doorleest ben je er.
namenlijk dmv een "and".

Coffee isn't a matter of life and death. It's far more important than that.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Idd, er is een nieuw probleem en dat wordt volgens mij met name veroorzaakt doordat de template te complex wordt. Door meer voor de template aanpak te gaan wordt de zaak een stuk duidelijker en lost het probleem zich vanzelf op.

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

Pagina: 1