descendant demo
File: Data.xml <chapter> <para>para1</para> <figure> <title>title 1</title> <graphic fileref="pic1.jpg" /> </figure> <para>para2</para> <sect1> <para>para3</para> <figure> <title>"He Lights"</title> <graphic fileref="pic2.jpg" /> </figure> <para>line 1</para> <sect2> <para>line 2</para> <figure> <title>title 2</title> <graphic fileref="pic1.jpg" /> </figure> </sect2> </sect1> </chapter> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" /> <xsl:template match="chapter"> <html> <body> <b>Pictures:</b> <br /> <xsl:for-each select="descendant::figure"> <a href="#{generate-id(graphic)}"> <xsl:value-of select="title" /> </a> <br /> </xsl:for-each> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="para"> <p> <xsl:apply-templates /> </p> </xsl:template> <xsl:template match="graphic"> <center> <a name="{generate-id(.)}"> <img src="{@fileref}" /> </a> <b> <xsl:value-of select="../title" /> </b> </center> </xsl:template> <xsl:template match="figure/title" /> </xsl:stylesheet> Output: <html> <body><b>Pictures:</b><br><a href="#d2e11">title 1</a><br><a href="#d2e27">"He Lights"</a><br><a href="#d2e43">title 2</a><br> <p>para1</p> <center><a name="d2e11"><img src="pic1.jpg"></a><b>title 1</b></center> <p>para2</p> <p>para3</p> <center><a name="d2e27"><img src="pic2.jpg"></a><b>"He Lights"</b></center> <p>line 1</p> <p>line 2</p> <center><a name="d2e43"><img src="pic1.jpg"></a><b>title 2</b></center> </body> </html>