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.3. xsl:for-each 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.

31.3.1. Een voorbeeld

Als we meerdere <student> elementen zouden hebben, in bijvoorbeeld een rootelement <class> :
XML Instantie
<?xml version="1.0" encoding="utf-8"?>
<class>
  <student id="101">
    <name>John</name>
    <IQ>140</IQ>
  </student>
  <student id="102">
    <name>Jane</name>
    <IQ>130</IQ>
  </student>
</class>
En we dezelfde XSLT als in vorig onderwerp :
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="student">
    <html>
      <head>
        <title>Student <xsl:value-of select="name"/></title>
      </head>
      <body>
        <h1>ID</h1>
        <p><xsl:value-of select="@id"/></p>
        <h1>IQ</h1>
        <p><xsl:value-of select="IQ"/></p>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
Zouden loslaten op voorvermelde bron XML, dan krijgen we volgend resultaat :
HTML
<html>
  <head>
    <title>Student John</title>
  </head>
  <body>
    <h1>ID</h1>
    <p>101</p>
    <h1>IQ</h1>
    <p>140</p>
  </body>
</html>
<html>
  <head>
    <title>Student Jane</title>
  </head>
  <body>
    <h1>ID</h1>
    <p>102</p>
    <h1>IQ</h1>
    <p>130</p>
  </body>
</html>
Wat waarschijnlijk niet de bedoeling is gezien we nu meerdere <html> elementen in hetzelfde document bekomen.

Toch was dit resultaat te verwachten.  Immers is hier voor elke <student> element van de bron XML de template toegepast.

31.3.2. xsl:for-each Element

Misschien zou een output HTML document als de volgende beter zijn :
HTML
<html>
  <head>
    <title>Class</title>
  </head>
  <body>
    <h1>John</h1>
    <h2>ID</h2>
    <p>101</p>
    <h2>IQ</h2>
    <p>140</p>
    <h1>Jane</h1>
    <h2>ID</h2>
    <p>102</p>
    <h2>IQ</h2>
    <p>130</p>
  </body>
</html>
Wat we kunnen bekomen door de XSLT als volgt op te stellen :
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="class">
    <html>
      <head>
        <title>Class</title>
      </head>
      <body>
        <xsl:for-each select="student">
          <h1><xsl:value-of select="name"/></h1>
          <h2>ID</h2>
          <p><xsl:value-of select="@id"/></p>
          <h2>IQ</h2>
          <p><xsl:value-of select="IQ"/></p>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
In deze versie wordt een template opgesteld waarvoor de informatie van het <class> rootelement voor de invulling wordt gebruikt.  Van dit rootelement selecteren we in het <xsl:for-each> element de <student> elementen voor de invulling.  Voor elk <student> element zal hier dus de nodige invulling gebeuren.

31.3.3. XPath

In plaats van aan te geven dat we een template definiëren voor <class> ( <xsl:template match="class">) en dat we hierin voor elke <student> een invulling wensen ( <xsl:for-each select="student">), kunnen we ook een template definiëren voor de root ( <xsl:template match="/">) met daarin aangegeven dat we voor elk <student> childelement van <class> een invulling wensen (<xsl:for-each select="class/student">) :
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="/">
    <html>
      <head>
        <title>Class</title>
      </head>
      <body>
        <xsl:for-each select="class/student">
          <h1><xsl:value-of select="name"/></h1>
          <h2>ID</h2>
          <p><xsl:value-of select="@id"/></p>
          <h2>IQ</h2>
          <p><xsl:value-of select="IQ"/></p>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
Zo kunnen we bijvoorbeeld ook volgende XML :
XML Instantie
<?xml version="1.0" encoding="utf-8"?>
<student id="101">
  <name>John</name>
  <IQ>140</IQ>
</student>
Omzetten naar volgende HTML :
HTML
<html>
  <head>
    <title>Student John</title>
  </head>
  <body>
    <h1>ID</h1>
    <p>101</p>
    <h1>IQ</h1>
    <p>140</p>
  </body>
</html>
Door de XSLT als volgt op te stellen :
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="/">
    <html>
      <head>
        <title>
          Student <xsl:value-of select="student/name"/>
        </title>
      </head>
      <body>
        <h1>ID</h1>
        <p>
          <xsl:value-of select="student/@id"/>
        </p>
        <h1>IQ</h1>
        <p>
          <xsl:value-of select="student/IQ"/>
        </p>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
Opnieuw hebben we hier een match voor de root, en geven we in de select attributen aan hoe de elementwaardes van <name> en <IQ> of attribuutwaarde van id childelementen of attributen zijn van het <student> element (student/name, student/IQ en student/@id).

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.