Using one nodeset to dictate the format of data from
I have two nodesets in a single XML document. I am trying to output the data from the first nodeset in a format derived from the contents of the second nodeset. The problem is that the second nodeset is nested elements with the same name. This means I need a recursive template call to make the output nest properly. This results in extra calls to the template. I know what's wrong with my current approach, but I can't figure out how to fix it. Does anyone know how to solve this problems?
I would also like to be able to set the header levels within my content based on the depth of the content element. Is it possible to "feed" a template data from the template that called it?
I am using XSL 2.0, Saxon 8B, XML 1.0
XML: <source-data> <content id="id1">content-1</content> <content id="id2">content-2</content> </source-data>
<structure-data> <topic-ref idref="id1" > <topic-ref idref="id2" > </topic-ref> </structure-data>
DESIRED OUTPUT: <html> <div>content-1 <div>content-2</div> </div> </html>
ACTUAL OUTPUT: <html> <div>content-1 <div>content-2</div> </div> <div>content-2</div> </html>
<xsl:template match="topic-ref"> <xsl:choose>
<div class="TOPIC-REF"> <!-- Select the source node which corresponds to the idref in the structure node --> <xsl:apply-templates select="key('id', ./@idref)"/> <xsl:for-each select="./topic-ref"> <xsl:apply-templates select="topic-ref"/> </xsl:for-each> <xsl:apply-templates select="topic-ref"/> </div> </xsl:when> <xsl:when test="not(./*) and name(../.)='content'"> <xsl:apply-templates select="key('id', ./@idref)"/> </xsl:when> </xsl:choose> </xsl:template>
I have been banging my head against the wall all day and I am hoping there is an elegant way to do this that I just didn't manage to figure out.
Thank you, Rebecca
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format