xsl-list
[Top] [All Lists]

[xsl] automatic creation of nested elements

2008-12-01 06:35:41
Input XML:

   <map>
      <source>bib-reference</source>
      <source>@id</source>
      <target>reference/citation</target>
      <target>@id</target>
   </map>

Required output:
<xsl:template match="bib-reference">
      <xsl:element name="reference">
        <xsl:element name="citation">
         <xsl:attribute name="id">
            <xsl:value-of select="@id"/>
         </xsl:attribute>
         <xsl:apply-templates/>
      </xsl:element>
   <xsl:element>
 </xsl:template>

My XSLT:
<xsl:template match="map">
<xsl:when test="count(child::*) &gt; 3 and not(starts-with(source,'@'))">
                                <mac:template match="{source[1]}">
                                   <xsl:variable name="nestedele"
select="tokenize(target[1],'/')"/>
                                      <xsl:for-each select="$nestedele">
                                          <xsl:variable name="tem" select="."/>
                                                <mac:element name="{$tem}">
                                                <xsl:for-each select="target">
                                                        <xsl:variable 
name="pos" select="position()"/>
                                                        <xsl:if 
test="not(position()=1) and exists(../source[2])">
                                                                <mac:attribute 
name="{substring-after(.,'@')}">
                                                                        
<mac:value-of select="{../source[$pos]}"/>
                                                                </mac:attribute>
                                                        </xsl:if>               
                                        
                                                </xsl:for-each>
                                                <mac:apply-templates/>
                                        </mac:element>
                                   </xsl:for-each>
                                </mac:template>
                        </xsl:when>
</xsl:template>

This will create one element after the other but it won't create the
nested one. In a result for bib-reference, two elements will be
created with same content. Which is a wrong one. Please guide me how
to generate the nested element structure.

Regards,
Ganesh

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>