homelinksBlijf op de hoogte van de recente aanpassingen op vbvoorbeelden!
Visual Basic 2010 Voorbeelden

visual basic 2010 broncode voorbeelden

Microsoft Visual Studio 2010Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

30.8. xsl:apply-templates Element

Print Email Deel op Facebook Deel op Twitter

Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Het is mogelijk om aparte templates op te stellen voor elementen of attributen.  Aan de hand van het <xsl:apply-templates> element kan men aangeven dat een bepaalde template wordt toegepast.

Als we beschikken over volgende bron XML :
XML Instantie
<?xml version="1.0" encoding="utf-8"?>
<members>
  <athlete>
    <id>101</id>
    <name>John</name>
    <member-since>2010-01-01</member-since>
  </athlete>
  <athlete>
    <id>102</id>
    <name>Jane</name>
    <member-since>2009-10-31</member-since>
  </athlete>
  <trainer language="en fr">
    <id>103</id>
    <name>Rita</name>
  </trainer>
  <athlete>
    <id>104</id>
    <name>Paul</name>
    <member-since>2008-10-15</member-since>
  </athlete>
  <trainer language="en">
    <id>105</id>
    <name>James</name>
  </trainer>
  <staff>
    <id>106</id>
    <name>Mia</name>
    <member-since>2007-10-15</member-since>
  </staff>
  <president>
    <name>Mike</name>
  </president>
</members>
En deze willen transformeren naar volgende output HTML :
HTML
<html>
  <head>
    <title>Members</title>
  </head>
  <body>
    <h1>Members</h1>

    <h2>President</h2>

    <h3>Mike</h3>

    <h2>Staff</h2>

    <h3>Mia</h3>
    <p>id : 106</p>
    <p>member since : 2007-10-15</p>

    <h2>Athletes</h2>

    <h3>John</h3>
    <p>id : 101</p>
    <p>member since : 2010-01-01</p>

    <h3>Jane</h3>
    <p>id : 102</p>
    <p>member since : 2009-10-31</p>

    <h3>Paul</h3>
    <p>id : 104</p>
    <p>member since : 2008-10-15</p>

    <h2>Trainers</h2>

    <h3>Rita</h3>
    <p>id : 103</p>
    <p>language : en fr</p>

    <h3>James</h3>
    <p>id : 105</p>
    <p>language : en</p>
  </body>
</html>
Dan kunnen we hiervoor volgende XSLT opstellen :
XML Transformation
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="members">
    <html>
      <head>
        <title>Members</title>
      </head>
      <body>
        <h1>Members</h1>
        <h2>President</h2>
        <xsl:apply-templates select="president"/>
        <h2>Staff</h2>
        <xsl:apply-templates select="staff"/>
        <h2>Athletes</h2>
        <xsl:apply-templates select="athlete"/>
        <h2>Trainers</h2>
        <xsl:apply-templates select="trainer"/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="president">
    <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="staff">
    <xsl:call-template name="athleteTemplate"/>
  </xsl:template>

  <xsl:template match="athlete" name="athleteTemplate">
    <xsl:apply-templates select="name"/>
    <xsl:apply-templates select="id"/>
    <p>member since : <xsl:value-of select="member-since"/></p>
  </xsl:template>

  <xsl:template match="trainer">
    <xsl:apply-templates select="name"/>
    <xsl:apply-templates select="id"/>
    <p>language : <xsl:value-of select="@language"/></p>
  </xsl:template>

  <xsl:template match="name">
    <h3><xsl:value-of select="."/></h3>
  </xsl:template>

  <xsl:template match="id">
    <p>id : <xsl:value-of select="."/></p>
  </xsl:template>
</xsl:stylesheet>
Met het element <xsl:apply-templates select="athelete"/> bijvoorbeeld geven we aan dat we voor de <athlete> elementen van de <members> matches een template willen toepassen.
Verderop staat de template voor de <athete> matches gedefinieerd.

Bemerk ook hoe we een <xsl:apply-templates> element kunnen opnemen zonder select attribuut.  Hierbij zal zelf gezocht worden of voor de childelementen en attributen van de bijhorende match een template wordt gevonden.

Het grote voordeel van dergelijke constructie is dat we éénmalig een template kunnen definiëren voor bepaalde elementen of attributen die op verschillende plaatsen worden teruggevonden.  De <name> en <id> childelementen bijvoorbeeld die zowel bij een <president>, <staff>, <athlete> of <trainer> element voorkomen, moeten bij deze transformatie immers steeds op dezelfde manier worden omgezet.

Het <xsl:call-template> element is bruikbaar om naar een andere te-gebruiken template te verwijzen.  De waarde van het name attribuut van dit element moet corresponderen met de waarde van het name attribuut van de template waar naartoe wordt verwezen.

Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.