|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
30.3.1. Een voorbeeldAls 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 : 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. boven
30.3.2. xsl:for-each ElementMisschien 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 : 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. boven
30.3.3. XPathIn 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"> ) : 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 : 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 zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
| hoofdstuk |
29. 30. 31.  |
| onderwerp |
30.2. 30.3. xsl:for-each Element 30.4.  |
| broncode |
|
| datum |
laatst gewijzigd op maandag 22 november 2010, laatst gepubliceerd op zondag 31 juli 2011 |
|