Modular Programming is good attitude of best programmer. We often need to keep our code in modular approach so that is would be easy to maintain and update or remove dead code and also it ease the process of bug tracking. XML and XSL processors provide freedom to import multiple imports to process the same XML document.
In the following XML data we have data from collage where student's and teacher's data is given. But we want to process the same XML data with different XSL files. Here in this example we want to show the teacher data in red background color and student data in green background color.
Data.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "RootXSLT.xsl"?> <data> <DataFor name = "Student" id = "001" > <firstname>Dave</firstname> <lastname>Walmod</lastname> <nickname>Devi</nickname> <course>30000</course> </DataFor> <DataFor name = "Student" id = "024" > <firstname>Sara</firstname> <lastname>Khan</lastname> <nickname>Zoya</nickname> <course>25000</course> </DataFor> <DataFor name = "Student" id = "056" > <firstname>Peter</firstname> <lastname>Symon</lastname> <nickname>John</nickname> <course>10000</course> </DataFor> <DataFor name = "Teacher" eCode = "0563"> <firstname>Jevy</firstname> <lastname>Symon</lastname> <nickname>Jevy</nickname> <salary>10000</salary> </DataFor> <DataFor name = "Teacher" eCode = "0565"> <firstname>Sonia</firstname> <lastname>WillWood</lastname> <nickname>Willy</nickname> <salary>10000</salary> </DataFor> </data> |
RootXSLT.xsl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:import href = "MainStyleSheet_Student.xsl"/> <xsl:import href = "MainStyleSheet_Teacher.xsl"/> <xsl:template match = "/"> <html> <body> <h2>Collage Data</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>ID</th> <th>First Name</th> <th>Last Name</th> <th>Nick Name</th> <th>Course or Salary</th> <th>Entity Type</th> </tr> <xsl:apply-imports/> </table> </body> </html> </xsl:template> </xsl:stylesheet> |
MainStyleSheet_Student.xsl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- xsl template declaration: template tells the xlst processor about the section of xml document which is to be formatted. It takes an XPath expression. In our case, it is matching document XPath expression attribute name == Student and will tell processor to process the entire document with this template. --> <!-- for-each processing instruction Looks for each DataFor element matching the XPath expression attribute name == Student --> <xsl:template match="DataFor[@name='Student']"> <tr> <td> <xsl:value-of select="@id" /> </td> <td> <xsl:value-of select="firstname" /> </td> <td> <xsl:value-of select="lastname" /> </td> <td> <xsl:value-of select="nickname" /> </td> <td> <xsl:value-of select="course" /> </td> <td style="background:red;color:white"> <xsl:value-of select="@name" /> </td> </tr> </xsl:template> </xsl:stylesheet> |
MainStyleSheet_Teacher.xsl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="DataFor[@name='Teacher']"> <!-- for-each processing instruction Looks for each DataFor element matching the XPath expression attribute name == Student --> <tr> <td> <xsl:value-of select="@eCode" /> </td> <td> <xsl:value-of select="firstname"/> </td> <td> <xsl:value-of select="lastname" /> </td> <td> <xsl:value-of select="nickname" /> </td> <td> <xsl:value-of select="salary" /> </td> <td style="background:green;color:white"> <xsl:value-of select="@name" /> </td> </tr> </xsl:template> </xsl:stylesheet> |
Explanation:-
The RootXSLT.xsl has imported MainStyleSheet_Teacher.xsl and MainStyleSheet_Student.xsl, the XSLT process will read both XSL files and apply template where the condition <xsl:template match="DataFor[@name='CONDITION_VALUE']"> is met.
The MainStyleSheet_Teacher.xsl will be applied when XSLT processor fetches the <DataFor> tag with attribute name "name" = "Teacher" and this same logic is used in MainStyleSheet_Student.xsl when <DataFor> tag with attribute name "name" = "Student" is fetched.
Thanks.......
Stay tuned for upcoming tutorials on processing XML with XLST.
Last update (26-April-2018).......
Comments
Post a Comment
Thanks in anticipation.