Mega Code Archive

 
Categories / XML / XSLT StyleSheet
 

Use for-each to loop through variable

File: Data.xml <?xml version="1.0" encoding="iso-8859-1"?> <booklist>   <book category="S">     <title>title 1</title>     <author>author 1</author>   </book> </booklist> File: Transform.xslt <?xml version="1.0" encoding="iso-8859-1"?> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   version="2.0">   <xsl:key name="biog" match="author" use="@name" />   <xsl:variable name="biogs" select="document('authors.xml')" />   <xsl:template match="/">     <html>       <body>         <xsl:variable name="all-books" select="//book" />         <xsl:for-each select="$all-books">           <h1>             <xsl:value-of select="title" />           </h1>           <h2>             Author             <xsl:if test="count(author)!=1">s</xsl:if>           </h2>           <xsl:for-each select="author">             <!-- for each author of this book -->             <xsl:variable name="name" select="." />             <h3>               <xsl:value-of select="$name" />             </h3>             <!--locate the biography by key lookup -->             <xsl:variable name="auth"               select="$biogs/key('biog', $name)" />             <p>               <xsl:value-of                 select="concat($auth/born, ' - ', $auth/died)" />             </p>             <p>               <xsl:value-of select="$auth/biog" />             </p>           </xsl:for-each>         </xsl:for-each>       </body>     </html>   </xsl:template> </xsl:transform> Output: <html>    <body>       <h1>title 1</h1>       <h2>                      Author                             </h2>       <h3>author 1</h3>       <p> - </p>       <p></p>    </body> </html>