Skip to main content

XSLT apply import tag by pran sukh on python hunter blog

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

Popular posts from this blog

XML, XSLT info by pran sukh on Python Hunter blog.

What is XML? Many computer systems contain data in incompatible formats. Exchanging data between incompatible systems (or upgraded systems) is a time-consuming task for web developers. Large amounts of data must be converted, and incompatible data is often lost. XML stores data in plain text format. This provides a software- and hardware-independent way of storing, transporting, and sharing data. XML also makes it easier to expand or upgrade to new operating systems, new applications, or new browsers, without losing data. With XML, data can be available to all kinds of "reading machines" like people, computers, voice machines, news feeds, etc. 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 37 38 39 40 41 42 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book category= "cooking" > <title lang= "en" > Every

Understanding the usage of underscore( _ ) of Python for beginner. On Python Hunter

Introduction: Just like you, a newbie in python scripting language, me too was confused about lot of new things in python that are not valid or available in other languages like Java, .Net etc. Just like other things i had seen the use of '_' underscore in python, at beginning level that flabbergasted me for a while.      With some research and practice i have summarised the following usage of '_' underscore in python. Hope you will find it helpful at beginning level. First Usage : Hold the previous output value. When used in interpreter. 1 2 3 4 5 6 7 _ = input () # For example you typed '5' print (_) # This will print '5' print ( int ( _ ) * int ( _ ) ) # This will print '25' print ( int ( _ ) + 10 ) The above will print '15', because last input was "5" and in above   line of code is producing '25' as output but not being handl

XSLT applyTemeplate tag by pran sukh on Python Hunter.

XSLT is used for presenting XML data in well structured way and in eye appealing sense. In XSLT we can define different templates and maintain criteria for XSLT processor to parse the XML data in and apply different template for different XML tags. Lets examine following example XML DATA. 1 2 3 4 5 6 7 8 9 10 <student id= "1" eCode= "e1" > <firstName> Python 1 </firstName> <lastName> Hunert 1 </lastName> <dob> <day> 01 </day> <month> Jan </month> <year> 1991 </year> </dob> <course> Programmer </course> </student> In above XML data we want to present student id with dark background and eCode with red background colors, First Name in blue color, last name in green color and date of birth in different modes, so it will look like this. Source File:- XML_DATA.xml 1 2 3 4 5 6 7 8 9 10