Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

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

31.8. xsl:apply-templates Element

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 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 maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.