Skip to main content

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
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
43
44
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="ApplyTemplatesXSLT.xsl"?>
<collage>
 <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>
 <student id="2" eCode="e2">
  <firstName>PranSukh </firstName>
  <lastName>NoLastName </lastName>
  <dob>
   <day>02</day>
   <month>Jan</month>
   <year>1992</year>
  </dob>
  <course>Engineering</course>
 </student>
 <student id="3" eCode="e3">
  <firstName>Pran </firstName>
  <lastName>Sukh </lastName>
  <dob>
   <day>03</day>
   <month>Jan</month>
   <year>1993</year>
  </dob>
  <course>Architect</course>
 </student>
 <student id="4" eCode="e4">
  <firstName>Hunter</firstName>
  <lastName>Dave</lastName>
  <dob>
   <day>04</day>
   <month>Jan</month>
   <year>1994</year>
  </dob>
  <course>Business Analyst</course>
 </student>
</collage>


XSLT FILE:- ApplyTemplatesXSLT.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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?xml version ="1.0" encoding="UTF-8"?>
<n:stylesheet version="1.0" xmlns:n="http://www.w3.org/1999/XSL/Transform">
  <n:template match="/">
  <html>
   <body>
    <n:apply-templates select="collage/student"/>
   </body>
  </html>
 </n:template>

 <n:template match="collage/student">
  <n:apply-templates select="@id"/>
  <n:apply-templates select="@eCode"/>
  
                <br></br>

  <n:apply-templates select="firstName"/>
  <n:apply-templates select="lastName"/>
  <n:apply-templates select="dob"/>
  
                <br></br>
  
  <n:apply-templates select="dob" mode="YYYY_MM_DD"/>
  <br></br>
  <n:apply-templates select="dob" mode="DD_MM_YY"/>
  <br></br>
  <br></br>
 </n:template>

 <n:template match="@id">
  ID:- <span style = "font-size = 22px;background:#0f4461;color:white"> 
   <n:value-of select = "." /> 
  </span> 
  
 </n:template>
 
 <n:template match="@eCode">
  eCode:- <span style = "font-size = 22px; background:red; color:white"> 
   <n:value-of select = "." /> 
  </span> 
  
 </n:template>

 <n:template match="firstName">
 First Name:<span style = "color:blue;"> 
   <n:value-of select = "." /> 
  </span> 
  <br/>
 </n:template>

 <n:template match="lastName">
 Last Name:<span style = "color:green;"> 
   <n:value-of select = "." /> 
  </span> 
  <br/>
 </n:template>

 <!-- MODE default -->
 <n:template match="dob">
  <n:apply-templates select="day"/>/<n:apply-templates select="month"/>/<n:apply-templates select="year"/>
 </n:template>

 
 
 <!-- MODE 1 -->
 <n:template match="dob" mode="YYYY_MM_DD">
  <n:apply-templates select="year"/>/<n:apply-templates select="month"/>/<n:apply-templates select="day"/>
 </n:template>
 
 <!-- MODE 2 -->
 <n:template match="dob" mode="DD_MM_YY">
  <n:apply-templates select="day"/>/<n:apply-templates select="month"/>/<n:apply-templates select="year"/>
 </n:template>
 
 
 <n:template match="day">
  <span style="color:red;">
   <n:value-of select = "."/>
  </span>
 </n:template>

 <n:template match="month">
  <span style="color:red;">
   <n:value-of select = "."/>
  </span>
 </n:template>

 <n:template match="year">
  <span style="color:red;">
   <n:value-of select = "."/>
  </span>
 </n:template>

</n:stylesheet>


Explanation:

The href="ApplyTemplatesXSLT.xsl" attribute value in XMLDATA file will pick up XSLT for designing purpose. now lets go to XSLT  file, the value of select attribute in <n:apply-templates select="collage/student"/> will look for template where template matches collage/student and <n:apply-templates select="@id"/> will find the template which matches the pattern @id and so on for all other tags.

Here this is how it looks like : -

<n:template select="@id"> will find its designing under the following tag.

<n:template match="@id">

Note:-  when <n:template match="collage/student"> is called it further goes to process all the templates defined in it one by one. Here in under this tag further tags like

1
2
3
4
5
6
7
8
<n:apply-templates select="@id"/>
<n:apply-templates select="@eCode"/>

<br></br>

<n:apply-templates select="firstName"/>
<n:apply-templates select="lastName"/>
<n:apply-templates select="dob"/>

are called now the XSLT processor will process this tags by looking at the template select value.

For example here is the code for template @id :


1
2
3
4
<n:template match="@id">
 ID:- <span style = "font-size = 22px; background:#0f4461;color:white"> 
  <n:value-of select = "." /> 
</span>


Now the twist is at 
<n:apply-templates select="dob" mode="YYYY_MM_DD"/>
here the mode is an extra attribute, now lets see the use of it.

MODE is inbuilt attribute of XSLT, it is used when we want to process the same node for multiple time and apply different styles, e.g we may need to show DOB in different formats. in this example mode="YYYY_MM_DD" and mode="DD_MM_YY" is used to process the single <dob> tag for different formats. where mode is not defined then it is considered as default mode.

When <n:apply-templates select="dob" mode="YYYY_MM_DD"/> calls
the template <n:template match="dob" mode="YYYY_MM_DD"> with given mode will be activated and processed. The same logic work for different modes.

Copy the above XML and XSL file, put these in same folder and open .xml file in Internet Explorer or FireFox, see the result, Make sure the put the right name of .XSL file in XML file's 
<?xml-stylesheet type="text/xsl" href="ApplyTemplatesXSLT.xsl"?>

NEXT:-<apply-imports>(Click here)

Thanks for this time.... Stay tuned for more updates on XML and XSLT.





Comments

Post a Comment

Thanks in anticipation.

Popular posts from this blog

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

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