[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Using one nodeset to dictate the format of data from

Subject: Using one nodeset to dictate the format of data from another nodeset
From: "Rebecca O'Connell" <rebecca321@xxxxxxxxx>
Date: Wed, 6 Jun 2007 19:40:26 -0400
 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: <xsl:key name="id" match="concept" use="@id" /> <xsl:key name="idref" match="*" use="@idref" />

 <xsl:template match="topic-ref">
   <xsl:choose>

<xsl:when test="boolean(./*)">

       <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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.