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>
Related examples in the same category