Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate HTML form dynamically using xml and reusable xslt

Tags:

html

xml

xslt

I have large number of xml files :

First:

<xmldata1>
    <record>
        <property11>abc</property11>
        <property12>def</property12>
        <property13>xyz</property13>
        ............
    </record>
    ........
</xmldata1>

Second:

<xmldata2>
    <record>
        <property21>abc</property21>
        <property22>def</property22>
        <property23>xyz</property23>
        ............
    </record>
    ........
</xmldata2>

and so on.

There won't be any more nested tags . But the name of property tag will be different for each xmldata file.

So i want to dynamically generate a HTML Form using XSLT to be used to read data for each xml . Where a simple text box should be used to read each property. and we can take the first record as reference for number and name of properties.

The desired output

<form name ="xmldata1">
    <table>
        <tr>
            <td>property11 :</td>
            <td><input type="text" name="property11"></td>
        </tr>
        .......
        and so on
    </table>
</form>

How can i achieve this. Where can i find sample example for this.

like image 955
gtiwari333 Avatar asked Feb 23 '23 22:02

gtiwari333


1 Answers

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes" />

    <!--Template match for the document element, no matter what the name -->
    <xsl:template match="/*">
      <form name="{local-name()}">
        <table>
           <!--Apply-templates for all of the record/property elements -->
           <xsl:apply-templates select="*/*"/>
         </table>
      </form>
    </xsl:template>

    <!--Match on all of the property elements and create a new row for each -->
    <xsl:template match="/*/*/*">
      <tr>
        <td><xsl:value-of select="local-name()"/> :</td>
        <td><input type="text" name="{local-name()}"/></td>
      </tr>
    </xsl:template>

</xsl:stylesheet>
like image 173
Mads Hansen Avatar answered Mar 24 '23 05:03

Mads Hansen