java - How to use XSLT recursion to convert any xml data to a html table view: -


for given xml, need generate html table represent values in xml. need recursion keyn, if valuen text print it. if valuen xml, print (nested)table it's value. think lack of understanding of how use xslt recursion correctly base of question. appreciated.

input:

<root>     <key1> text value  </key1> <key2>      <a> aaa </a>     <b> bbb </b> </key2> <keyn> valuen </keyn> <root> 

output:

<table border="1px">     <tr>         <td> key1 </td>         <td> text value </td>     </tr>      <tr>         <td> key2 </td>         <td>             <table border="1px">                 <tr> <td> </td> <td> aaa </td> </tr>                 <tr> <td> b </td> <td> bbb </td> </tr>             </table>         </td>     </tr>      <tr>          <td> keyn </td>         <td>             valuen (if valuen text)                     or             <table> ... </table> (if valuen xml)         <td>     </tr> </table> 

this stylesheet:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform">     <xsl:template match="/*//*[1]">         <table border="1">             <xsl:call-template name="makerow"/>         </table>     </xsl:template>     <xsl:template match="*" name="makerow">         <tr>             <td>                 <xsl:value-of select="name()"/>             </td>             <td>                 <xsl:apply-templates select="node()[1]"/>             </td>         </tr>         <xsl:apply-templates select="following-sibling::node()[1]"/>     </xsl:template>     <xsl:template match="/*">         <xsl:apply-templates select="node()[1]"/>     </xsl:template> </xsl:stylesheet> 

output:

<table border="1">     <tr>         <td>key1</td>         <td> text value  </td>     </tr>     <tr>         <td>key2</td>         <td>             <table border="1">                 <tr>                     <td>a</td>                     <td> aaa </td>                 </tr>                 <tr>                     <td>b</td>                     <td> bbb </td>                 </tr>             </table></td>     </tr>     <tr>         <td>keyn</td>         <td> valuen </td>     </tr> </table> 

note: use fine grained traversal patter. 3 rules: "first child descendant of root element", output table , call makerow; makerow (match element not being first child descendant nor root element) output tr , table cells name , first child applycation, apply templates next sibling; root element rule, start fine grained traversal.


Comments

Popular posts from this blog

android - Spacing between the stars of a rating bar? -

aspxgridview - Devexpress grid - header filter does not work if column is initially hidden -

c# - How to execute a particular part of code asynchronously in a class -