Processing of structured documents, Session 1 (27.-28.1.)



  1. XSLT transformation (three alternatives shown):

    1. <?xml version="1.0"?>
      
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      
      <xsl:template match="/cards">
      <html><body>
      <h2>Postal addresses:</h2>
      <ul>
      <xsl:apply-templates select="card" mode="addr"/>
      </ul>
      
      <h2>Email addresses:</h2>
      <ul>
      <xsl:apply-templates select="card" mode="email"/>
      </ul>
      
      </body></html>
      </xsl:template>
      
      <xsl:template match="card" mode="addr">
      <li>
      <xsl:apply-templates select="name | address"/>
      </li>
      </xsl:template>
      
      <xsl:template match="card" mode="email">
      <li>
      <xsl:apply-templates select="name | email"/>
      </li>
      </xsl:template>
      
      <xsl:template match="name">
      Name: <xsl:apply-templates select="fname"/>
      <xsl:text> </xsl:text>
      <xsl:apply-templates select="lname"/>
      <br/>
      </xsl:template>
      
      <xsl:template match="address">
      Address: <xsl:apply-templates/>
      </xsl:template>
      
      <xsl:template match="email">
      Email: <xsl:apply-templates/><br/>
      </xsl:template>
      
      
      </xsl:stylesheet>
      
      
    2. <?xml version="1.0" encoding="ISO-8859-1"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
      
        <xsl:template match="/">
      	<html>
      	<body>
      		<xsl:if test="cards/card">
      			<h2>Postal addresses:</h2>
      			<xsl:for-each select="cards/card">
      				<p>
      					<xsl:text>Name: </xsl:text>
      					<xsl:value-of select="name/fname"/>
      					<xsl:text> </xsl:text>
      					<xsl:value-of select="name/lname"/><br/>
      					<xsl:text>Address: </xsl:text>
      					<xsl:value-of select="address"/><br/>
      				</p>
      			</xsl:for-each>
      			<h2>Email addresses:</h2>
      			<xsl:for-each select="cards/card">
      				<p>
      					<xsl:text>Name: </xsl:text>
      					<xsl:value-of select="name/fname"/>
      					<xsl:text> </xsl:text>
      					<xsl:value-of select="name/lname"/><br/>
      					<xsl:text>Email: </xsl:text>
      					<xsl:for-each select="email">
      						<xsl:value-of select="."/><br/>
      					</xsl:for-each>
      				</p>
      			</xsl:for-each>
      		</xsl:if>
      	</body>
              </html>
        </xsl:template>
      
      </xsl:stylesheet>
      
      
    3. <?xml version="1.0" encoding="ISO-8859-1"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
      
        <xsl:template match="/">
      	   <html>
      		<body>
      			<xsl:if test="cards/card">
      				<h2>Postal addresses:</h2>
      				<xsl:for-each select="cards/card">
      				   <p>
      					<xsl:value-of select="concat('Name: ',name/fname,' ',name/lname)"/><br/>
      					<xsl:value-of select="concat('Address: ',address)"/><br/>
      				   </p>
      				</xsl:for-each>
      				<h2>Email addresses:</h2>
      				<xsl:for-each select="cards/card">
      				  <p>
      					<xsl:value-of select="concat('Name: ',name/fname,' ',name/lname)"/><br/>
      					<xsl:text>Email: </xsl:text>
      					<xsl:for-each select="email">
      					   <xsl:value-of select="."/>
      					   <xsl:if test="position()!=last()">
      					      <xsl:text>, </xsl:text>
      					   </xsl:if>
      					</xsl:for-each>
      						</p>
      				</xsl:for-each>
      			</xsl:if>
      		</body>
      	</html>
        </xsl:template>
      
      </xsl:stylesheet>
      
      

Helena Ahonen-Myka
Last modified: Tue Jan 28 17:11:18 EET 2003