xsl-list
[Top] [All Lists]

[xsl] Converting an xml to another xml Using XSLT

2006-05-02 11:36:44
Question: Converting an XML markup to another XML Markup Using XSLT.

Sample XML Markup:
<class > 
   <classitem> 
     <identifier> 
        <name>Sales </name> 
               <code>1234</code> 
     </identifier> 
     <classitem> 
        <identifier> 
          <name> Tax</name> 
          <code>5678</code> 
       </identifier> 
     </classitem> 
    </classitem> 
</class> 

After XSL Transformation, the output markup should be as follows:
  <hier>
          <hierlev >
             <heading>
                <title>Sales</title>
             </heading>
             <hierlev>
                <heading>
                    <title> Tax</title>
                </heading>
               </hierlev>
            </hierlev>
    </hier>

The mapping between Input and output markup elements as follows:

class  -     hier
Classitem - heirlev 
identifier -  heading
name       - title
code has no mapping i.e. the element can be ignored in XSLT Code

I have written XSLT code which works for fixed depth of class.Actually I
have written XSLT code for classItem depth of 4, but for simplicity...
the following code is for classItem depth of 2 only.
<xsl:template match="class">
        <xsl:param name="count"/>
        <xsl:param name="v1" select="descendant::name[1]/text()"/>
        <xsl:param name="v2" select="descendant::name[2]/text()"/>
        <xsl:call-template name="createHierLevElement">
          <xsl:with-param name="hierLevContent">
               <xsl:element name="heading">
                  <xsl:element name="title">
                      <xsl:copy-of select="$v1"/> 
                   </xsl:element>
                </xsl:element>
             
                <xsl:if test=" $count = 2 ">
                  <xsl:call-template name="createHierLevElement">
                      <xsl:with-param name="hierLevContent">
                          <xsl:element name="heading">
                             <xsl:element name="title">                 
                                  <xsl:copy-of select="$v2"/> 
                             </xsl:element>
                          </xsl:element>
                       </xsl:with-param>
                   </xsl:call-template>
                </xsl:if>
             </xsl:with-param>   
        </xsl:call-template>
  </xsl:template>
  

  <xsl:template name="createHierLevElement">
      <xsl:param name="hierLevContent" />
        
        <xsl:element name="hierlev">
           <xsl:copy-of select="$hierLevContent" />
        </xsl:element>
    </xsl:template>

If my input markup has arbitary depth, the above XSLT code will not
work, so I need code which accomodates any depth of ClassItem.



Thanks.
Sridhar

--~------------------------------------------------------------------
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>