5 xsl (formatting xml documents)
TRANSCRIPT
![Page 2: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/2.jpg)
XSL | Atul Kahate 2
Agenda Stylesheets Cascading Style Sheets (CSS) Extensible Stylesheet Language
(XSL) XSL Transformations (XSLT)
![Page 3: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/3.jpg)
XSL | Atul Kahate 3
Style Sheets Basics XML concentrates on the structure of
information Normally, the appearance of information
is secondary Sometimes, it is necessary to format XML
information so as to view it in a particular manner
This is called as styling an XML document
![Page 4: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/4.jpg)
XSL | Atul Kahate 4
Style Sheets Formatting instructions for XML
documents are organized/grouped These organized instructions are
called as style sheets A style sheet can be applied to
view a particular XML document in a specific format
![Page 5: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/5.jpg)
XSL | Atul Kahate 5
Standards For XML Styling Two main standards Developed by W3C
CSS (Cascading Style Sheet) XSL (XML Stylesheet Language)
![Page 6: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/6.jpg)
XSL | Atul Kahate 6
CSS versus XSL CSS Approach
XSL Approach
XML Documen
tCSS Style
Sheet
XML Documen
tXSL Style
Sheet
HTMLDocumen
t
![Page 7: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/7.jpg)
XSL | Atul Kahate 9
CSS Terminology Style sheets are used to define rules A rule is composed of two parts
Selector (Element to which the rule applies) Declaration (Attributes and values)
ExamplePARA {FONT: 12pt “Times New Roman”}
Here, PARA is the selector, the rest is the declaration
![Page 8: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/8.jpg)
XSL | Atul Kahate 11
DTD and Stylesheet Example - 1 Consider a MEMO DTD…<!DOCTYPE MEMODTD [<!ELEMENT MEMO (TO, FROM, SUBJECT, BODY)><!ELEMENT TO (#PCDATA)><!ELEMENT FROM (#PCDATA)><!ELEMENT SUBJECT (#PCDATA)><!ELEMENT BODY (#PCDATA)>]>
![Page 9: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/9.jpg)
XSL | Atul Kahate 12
DTD and Stylesheet Example - 2 Suppose we want to do the following
Display the elements TO, FROM, and SUBJECT in bold along with their contents
Display the entire memo in Times New Roman font with size as 12 points, and margin of 1 line
Use the stylesheet as follows
![Page 10: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/10.jpg)
XSL | Atul Kahate 13
DTD and Stylesheet Example - 3 CSS declaration follows…MEMO {font-family: “Times New Roman”, “Book Antigua”,
serif;font-size: 12pt;margin: lin}
TO, FROM, SUBJECT {font-weight: bold}
![Page 11: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/11.jpg)
XSL | Atul Kahate 14
Sample XML Document<?xml version=“1.0”?><?xml-stylesheet href=“article.css” type=“text/css”?><article>
<title> Style Sheets Example </title><section>
<p> This example illustrates how style sheets can be applied to XML documents. </p></section><section>
<title> Styling </title><p> Style sheets format XML documents in a desired manner.
</p></section>
</article>
![Page 12: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/12.jpg)
XSL | Atul Kahate 15
Corresponding CSS Document/* a simple style sheet */article{
font-family: Palatino, Garamond, “Times New Roman”, serif;font-size: 18pt;margin: 5px
}article, p, title{
display: block;margin-bottom: 10px
}article title{
font-size: 24pt;font-weight: bold
}section title{
font-size: 20pt;font-style: italic
}
![Page 13: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/13.jpg)
XSL | Atul Kahate 16
Output in Web Browser
![Page 14: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/14.jpg)
Introduction to XSLT Concepts
![Page 15: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/15.jpg)
XSL | Atul Kahate 22
Programming Language Classification Imperative Languages
Set some variables, call methods, use operators that change value, etc
C, C++, Java, C# Declarative or Functional Languages
Perform logical operations using declarations, rather than writing code
Prolog, XSLT
![Page 16: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/16.jpg)
XSL | Atul Kahate 23
Recursion Using recursion, imperative
languages such as Java can behave like declarative languages such as XSLT
Examplepublic int factorial(int number) { if (number <= 1) return 1; return number * factorial(number-1);}
![Page 17: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/17.jpg)
XSL | Atul Kahate 24
Recursion Illustrated
![Page 18: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/18.jpg)
XSL | Atul Kahate 25
Recursion and XSL: When? When we have a set of repeating values in the
source XML and we want the transformation result to reflect something about all of those values. For example, if you have a catalog of items in XML and want to present those items along with the price for all of the items, you would have to find that total price using a recursive template.
When the source XML contains a number x in a tag, for example <countTo number="5"/>, and you want to present some information that same x number of times in the transformation output.
![Page 19: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/19.jpg)
XSL Terminologies
XSL, XSLT, XSLFO, XPath, XPointer, Stylesheet,
Template, …
![Page 20: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/20.jpg)
XSL | Atul Kahate 27
XSL (XML Stylesheet Language) Two parts
XSLT (XSL Transformation) XSL-FO (XSL Formatting Objects)
XSLFO is similar to CSS, quite complex
We will discuss XSLT in detail, XSL-FO in brief
![Page 21: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/21.jpg)
XSL | Atul Kahate 28
XPath Allows searching and navigation of
XML documents Can specify which parts of an XML
document we want to transform Used heavily in XSLT for searching
of information
![Page 22: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/22.jpg)
XSL | Atul Kahate 29
XSLT Usage Styling Add elements specific to viewing (e.g. logo) Create new content from existing one (e.g.
TOC) Present information with the right level of
details (e.g. overview for managers, details for staff)
Convert between different DTDs/schemas or different versions of a DTD/schema
Transform XML documents into HTML for compatibility with older browsers
![Page 23: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/23.jpg)
XSL | Atul Kahate 30
XSLT Stylesheets An XSLT stylesheet consists of a series
of templates, together with instructions based on XPath
Tell an XSLT processor how to match the template against the nodes in an XML input document
For each template, the processor reads the input document for all matching patterns and produces an output document
See next slide
![Page 24: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/24.jpg)
XSL | Atul Kahate 31
XSLT Processing ConceptInput XML document XSLT
Processor
Output XML document
XSLT Template
XSLT Stylesheet
![Page 25: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/25.jpg)
XSLT Basics
![Page 26: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/26.jpg)
XSL | Atul Kahate 33
Simple XSLT Example XML (test.xml)
<?xml version="1.0"?><?xml-stylesheet href="test.xsl" type="text/xsl"?><xslTutorial> <title>XSL</title> <author>John Smith</author> </xslTutorial>
XSLT (test.xsl)<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"><xsl:template match="/"> <H1><xsl:value-of select="//title"/></H1> <H2><xsl:value-of select="//author"/></H2> </xsl:template> </xsl:stylesheet>
![Page 27: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/27.jpg)
XSL | Atul Kahate 34
Change to the XML The XML document has an <xml-
stylesheet> tag, which informs the parser that we want to use an XSLT stylesheet to process this XML file before displaying its contents
![Page 28: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/28.jpg)
XSL | Atul Kahate 35
Now look at the XSL The XSLT stylesheet is also a well-
formed XML document The <xsl:stylesheet> element has
two attributes Version specifies the XSLT
specifications version Declares the namespace
![Page 29: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/29.jpg)
XSL | Atul Kahate 36
Question What if our XML document has
multiple occurrences of the title and author tags? We would still see only the first
occurrence, since we have not yet seen the recursion part of XSLT
![Page 30: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/30.jpg)
XSL | Atul Kahate 37
Modified XSL<xsl:stylesheet
xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:template match="/"> <H2><xsl:value-of
select="//author"/></H2> <H1><xsl:value-of select="//title"/></H1> </xsl:template> </xsl:stylesheet>
![Page 31: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/31.jpg)
XSL | Atul Kahate 38
Interesting Tricks – 1 XML (trick-1.xml)
<?xml version="1.0"?><?xml-stylesheet href=“trick-1.xsl" type="text/xsl"?><xslTutorial> <title>XSL</title> <author>John Smith</author> </xslTutorial>
XSL (trick-1.xsl)<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"></xsl:stylesheet>
What would be the output?
![Page 32: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/32.jpg)
XSL | Atul Kahate 39
Answer The full XML contents Why?
If no template is specified, XSLT produces the complete XML as output!
![Page 33: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/33.jpg)
XSL | Atul Kahate 40
Interesting Tricks – 2 XML (trick-2.xml)
<?xml version="1.0"?><?xml-stylesheet href=“trick-2.xsl" type="text/xsl"?><xslTutorial> <title>XSL</title> <author>John Smith</author> </xslTutorial>
XSL (trick-2.xsl)<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"><xsl:template match=“/”>
</xsl:template></xsl:stylesheet>
What would be the output?
![Page 34: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/34.jpg)
XSL | Atul Kahate 41
Answer Now we have said, match root, but
once root is matched, we say do nothing (since there is nothing between <xsl:template match = “/” and </xsl:template> tags
Hence, output is empty
![Page 35: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/35.jpg)
XSL | Atul Kahate 42
Interesting Tricks – 3 XML (trick-3.xml)
<?xml version="1.0"?><?xml-stylesheet href=“trick-3.xsl" type="text/xsl"?><xslTutorial> <title>XSL</title> <author>John Smith</author> </xslTutorial>
XSL (trick-3.xsl)<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"><xsl:template match=“/”>
<xsl:value-of select = “title” /> </xsl:template></xsl:stylesheet>
What would be the output?
![Page 36: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/36.jpg)
XSL | Atul Kahate 43
Answer Now, we try to find a match on the
title element inside /. But the path for title should be
/xslTutorial/title Hence, output would be empty
![Page 37: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/37.jpg)
XSL | Atul Kahate 44
Interesting Tricks – 4 XML (trick-4.xml)
<?xml version="1.0"?><?xml-stylesheet href=“trick-4.xsl" type="text/xsl"?><xslTutorial> <title>XSL</title> <author>John Smith</author> </xslTutorial>
XSL (trick-4.xsl)<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"><xsl:template match=“/”>
<xsl:value-of select = “/xslTutorial/title” /> </xsl:template></xsl:stylesheet>
What would be the output?
![Page 38: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/38.jpg)
XSL | Atul Kahate 45
Answer It would produce the contents of
the title element, as expected, now
![Page 39: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/39.jpg)
Template Basics
![Page 40: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/40.jpg)
XSL | Atul Kahate 47
Usage of Templates <xsl:template match = “…”>
We know that this clause is used to match a particular tag from an XML file and to do processing, accordingly
<xsl:template name = “…”> Allows us to define a template Once such a template is defined, we
can use <xsl:call-template name = “…”> to call that defined template
![Page 41: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/41.jpg)
XSL | Atul Kahate 48
Understanding <apply-templates> class.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="class.xsl"?> <class> <student>Jack</student> <student>Harry</student> <student>Rebecca</student> <teacher>Mr. Bean</teacher> </class>
Class.xsl<?xml version="1.0" ?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match=“student"> Found a learner! </xsl:template> </xsl:stylesheet>
OutputFound a learner! Found a learner! Found a learner! Mr. Bean
![Page 42: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/42.jpg)
XSL | Atul Kahate 49
How it Works?<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="class.xsl"?> <class> <student>Jack</student> <student>Harry</student> <student>Rebecca</student> <teacher>Mr. Bean</teacher> </class>
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="student"> Found a learner! </xsl:template> </xsl:stylesheet>
Step 1: For all matching student tags, display output Found a learner!
Step 2: Come here and run the template recursively for all the student tags, displaying Found a learner!
Step 3: For all tags other than student, there is no template in our XSL. Therefore, blindly output them, as they are!
![Page 43: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/43.jpg)
XSL | Atul Kahate 50
Plain English Version For all the elements in the given
XML If the current element = “student”
Display “Found a learner” Else
Display the actual contents of the element End-if
End-For
![Page 44: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/44.jpg)
XSL | Atul Kahate 51
Explanation The way this works is:
Use a template if one defined Blindly output the contents of the elements
wherever there is no template defined For each <template match = “student”>,
we display the text Found a learner! instead of the student name itself.
However, for the teacher tag, there is no <template match>. Therefore, its contents are displayed as they are.
![Page 45: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/45.jpg)
XSL | Atul Kahate 52
Notes on the Result – 1 Note that we would see display for all the
student tags However, in the first example, we would
have seen the output only for the first instance of title and author tags
Why? In the earlier example, there was no template,
i.e. no recursion – the syntax used was value-of select
Now, we use a template, which introduces recursion
![Page 46: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/46.jpg)
XSL | Atul Kahate 53
Notes on the Result – 2 This style of coding is ambiguous! It can lead to completely
unexpected results Let us modify our XML and XSL
now
![Page 47: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/47.jpg)
XSL | Atul Kahate 54
Modified XML and XSL class1.xml<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="class1.xsl"?> <class> <dept>Bye</dept><salary>10000</salary>
</class> class1.xsl<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="hello"> Found a learner! </xsl:template></xsl:stylesheet>
What would be the output?
![Page 48: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/48.jpg)
XSL | Atul Kahate 55
Output Bye10000
Why? The attempt is to find a match for the tag or
element hello in our XML document, which is not found
For other tags in the XML document (i.e. dept and salary), there is no template defined; so no special processing is needed for them, except blindly outputting their contents, as before!
![Page 49: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/49.jpg)
XSL | Atul Kahate 56
Further Modifications Modified XML<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="class1.xsl"?> <class> <dept>Bye</dept><salary>10000</salary><name><first>test</first><last>test</last></name></class> Resulting OutputBye10000testtest
This is based on same logic as earlier
![Page 50: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/50.jpg)
XSL | Atul Kahate 57
Still More Changes class3.xml<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="class1.xsl"?> <class> <dept>Bye</dept>
<salary>10000</salary></class> class3.xsl<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="dept">Found a learner!</xsl:template><xsl:template match="salary"></xsl:template>
</xsl:stylesheet>
![Page 51: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/51.jpg)
XSL | Atul Kahate 58
Output Found a learner!
This is because we have suppressed the output for the salary tag now
![Page 52: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/52.jpg)
Introducing apply-templates
![Page 53: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/53.jpg)
XSL | Atul Kahate 60
Use of <apply-templates> - Tricky class2.xml<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl"
href="class2.xsl"?> <class> <college>test</college>
<dept>one</dept> <salary>10000</salary>
<dept>two</dept> <salary>20000</salary>
<dept>three</dept> <salary>30000</salary></class>
Class2.xsl<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match=“dept"> <xsl:apply-templates /> </xsl:template></xsl:stylesheet>
![Page 54: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/54.jpg)
XSL | Atul Kahate 61
Output Testone10000two20000three3000
0
Reason: The logic works as: If there is at least one dept tag
<apply-templates> (which means, display the default output as it is, which means everything)
![Page 55: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/55.jpg)
XSL | Atul Kahate 62
Suppressing Unwanted Output Modified XSL<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="dept"><xsl:apply-templates/></xsl:template><xsl:template match="salary">
</xsl:template>
</xsl:stylesheet>
![Page 56: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/56.jpg)
Controlling the Output the Way We Want
![Page 57: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/57.jpg)
XSL | Atul Kahate 64
XSL Changed – 1 Now changes the XSL to this:<?xml version="1.0" ?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="class"> <xsl:apply-templates select="student"/> </xsl:template> <xsl:template match="student"> Found a learner! </xsl:template>
</xsl:stylesheet> What would be the output? See next slide.
![Page 58: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/58.jpg)
XSL | Atul Kahate 65
Plain English Version For each element in the given XML
If the current element is class If the child element of the current element is student
Output Found a learner End-if
End-if End-for
Note: There is no Else now!
![Page 59: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/59.jpg)
XSL | Atul Kahate 66
Output of the second XSL Found a learner! Found a learner! Found a learner!
Explanation <xsl:template match="class">
The XSLT processor begins at the root element when looking for template matches. It finds a match for the root element class.
<xsl:apply-templates select="student"/> In our template that matched class we use xsl:apply-templates which will
check for template matches on all the children of class. The children of class in our XML document are student and teacher.
To have the teacher element "Mr. Bean" ignored, we use the select attribute of xsl:apply-templates to specify only student children.
The XSLT processor then goes searching templates that only match student elements.
<xsl:template match="student“> The processor finds the only other template in our XSLT, which prints out
"Found a learner!" for each student element in the XML document. XSLT finds three students, so "Found a learner!" is displayed three times.
XSLT then finishes its processing and we are left with XSLT output that has eliminated the unwanted text, "Mr. Bean!"
![Page 60: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/60.jpg)
XSL | Atul Kahate 67
Beware of this Problem! Suppose the XSL was like this:<?xml version="1.0" ?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="class"> <xsl:apply-templates /> </xsl:template> <xsl:template match="student"> Found a learner! </xsl:template>
</xsl:stylesheet> What would be the output? See next slide.
![Page 61: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/61.jpg)
XSL | Atul Kahate 68
Analysis The only change we have made is
to remove the select attribute from apply-templates
This would translate to something different!
See next slide
![Page 62: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/62.jpg)
XSL | Atul Kahate 69
Plain English Version For each element in the given XML
If the current element is class If the child element of the current element is student
Output Found a learner Else
Output the contents of the current element as they are End-if
End-if End-for
Note: There is an Else now!
![Page 63: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/63.jpg)
XSL | Atul Kahate 70
What about this? XML <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="class.xsl"?> <college> <class> <institution>SICSR</institution> <student>Jack</student> <student>Harry</student> <student>Rebecca</student> <teacher>Mr. Bean</teacher> </class> </college> XSL <?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="class"> <xsl:apply-templates/> </xsl:template> <xsl:template match="student"> Found a learner! </xsl:template> </xsl:stylesheet>
![Page 64: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/64.jpg)
XSL | Atul Kahate 71
Output SICSR Found a learner! Found a learner!
Found a learner! Mr. Bean
Explanation The same logic as earlier applies If a match is found, do something; else
display contents of current element blindly Remember, we do not have a select
attribute in the template If we have it, what would happen?
![Page 65: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/65.jpg)
XSL | Atul Kahate 72
Another Variation XML <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="class.xsl"?> <college> <class> <institution>SICSR</institution> <student>Jack</student> <student>Harry</student> <student>Rebecca</student> <teacher>Mr. Bean</teacher> </class> </college>
XSL <?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="class"> <xsl:apply-templates select="student"/> </xsl:template> <xsl:template match="student"> Found a learner! </xsl:template> </xsl:stylesheet>
Output Found a learner! Found a learner! Found a learner!
![Page 66: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/66.jpg)
XSL | Atul Kahate 73
Summary Do not leave our code in an ambiguous
state This happens if we specify <apply-
templates> without any specific select attribute
It can also happen if we do not specify exact selection criteria inside <template match>
Output may not be as expected!
![Page 67: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/67.jpg)
XSL | Atul Kahate 74
Another XSLT Example – 1 Consider the following XML
document<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="pune.xsl"?>
<content><about> PUNE </about><city>
<line1> Pune is a lovely city </line1><line2> The education facilities are as best as you can get </line2><line3> And the weather is great, too. </line3>
</city></content>
![Page 68: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/68.jpg)
XSL | Atul Kahate 75
Another XSLT Example – 2 Here is the corresponding XSLT document<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="content"><html>
<head><title>Welcome to Pune!</title></head><body>
<h1><xsl:value-of select="about"/></h1><h2><xsl:value-of select="city/line1"/></h2><h3><xsl:value-of select="city/line2"/></h3><h4><xsl:value-of select="city/line3"/></h4>
</body></html>
</xsl:template></xsl:stylesheet>
![Page 69: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/69.jpg)
Using Parameters in Templates
![Page 70: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/70.jpg)
XSL | Atul Kahate 77
Using Parameters in Templates<xsl:template name = "print" > <xsl:param name = "A" /> <xsl:param name = "B" >111</xsl:param> <xsl:value-of select = "$A" /> <xsl:text > + </xsl:text> <xsl:value-of select = "$B" /> <xsl:text > = </xsl:text> <xsl:value-of select = "$A+$B" /> </xsl:template> This defines a template (like a method) called as print This template can receive two parameters, named A and B. B has a
default value of 111. The template prints the following as the output:
Value of A + Value of B = Sum of A and BFor example, if a caller calls this template with A = 10 and B = 20, the output will be:10 + 20 = 30
![Page 71: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/71.jpg)
XSL | Atul Kahate 78
Calling Templates<xsl:template match = "/" >
<xsl:call-template name = "print" > <xsl:with-param name = "A" >11</xsl:with-param> <xsl:with-param name = "B" >33</xsl:with-param> </xsl:call-template> <xsl:call-template name = "print" > <xsl:with-param name = "A" >55</xsl:with-param> </xsl:call-template>
</xsl:template>
Now, we are calling the template defined earlier (print) twice in succession: first time passing A = 11 and B = 33; and second time passing A = 55 and not passing any value for B
Output (Full code on next slide): 11 + 33 = 4455 + 111 = 166Note: 111 was B’s default value in the print template on the previous slide
![Page 72: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/72.jpg)
XSL | Atul Kahate 79
Code XML
<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="1.xsl" ?><AAA > <BBB>bbb </BBB> <CCC>ccc </CCC> </AAA>
XSL<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" > <xsl:output method = "text" />
<xsl:template match = "/" > <xsl:call-template name = "print" > <xsl:with-param name = "A" >11</xsl:with-param> <xsl:with-param name = "B" >33</xsl:with-param> </xsl:call-template> <xsl:call-template name = "print" > <xsl:with-param name = "A" >55</xsl:with-param> </xsl:call-template> </xsl:template>
<xsl:template name = "print" > <xsl:param name = "A" /> <xsl:param name = "B" >111</xsl:param> <xsl:text > </xsl:text> <xsl:value-of select = "$A" /> <xsl:text > + </xsl:text> <xsl:value-of select = "$B" /> <xsl:text > = </xsl:text> <xsl:value-of select = "$A+$B" /> </xsl:template> </xsl:stylesheet>
![Page 73: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/73.jpg)
Attributes
![Page 74: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/74.jpg)
XSL | Atul Kahate 81
Dealing with Attributes XML
<?xml version="1.0"?><?xml-stylesheet href="test.xsl" type="text/xsl"?><xslTutorial> <dog name='Joe'> <data weight='18 kg' color="black"/> </dog> </xslTutorial>
XSL<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:template match="dog"> <P><B><xsl:text> Dog: </xsl:text> </B> <xsl:value-of select="@name"/></P> <P><B><xsl:text> Color: </xsl:text> </B> <xsl:value-of select="data/@color"/></P> </xsl:template> </xsl:stylesheet>
![Page 75: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/75.jpg)
XSL | Atul Kahate 82
Another Example XML <?xml version="1.0"?> <?xml-stylesheet href="products.xsl" type="text/xsl"?>
<card type="simple"> <name>John Doe</name> <title>CEO, Widget Inc.</title> <email>[email protected]</email> <phone>(202) 456-1414</phone> </card>
XSL <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="http://www.w3.org/1999/xhtml"> <xsl:template match="card[@type='simple']"> <html xmlns="http://www.w3.org/1999/xhtml"> <title>business card</title><body> <xsl:apply-templates select="name"/> <xsl:apply-templates select="title"/> <xsl:apply-templates select="email"/> <xsl:apply-templates select="phone"/> </body></html> </xsl:template> <xsl:template match="card/name"> <h1><xsl:value-of select="text()"/></h1> </xsl:template> <xsl:template match="email"> <p>email: <a href="mailto:{text()}"><tt> <xsl:value-of select="text()"/> </tt></a></p> </xsl:template>
</xsl:stylesheet>
![Page 76: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/76.jpg)
A Detailed Example
![Page 77: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/77.jpg)
XSL | Atul Kahate 84
discussionForumHome.xml<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href="discussionForumHome.xsl"
type="text/xsl"?><disussionForumHome> <messageBoard id="1" name="Java Programming"/> <messageBoard id="2" name="XML Programming"/> <messageBoard id="3" name="XSLT
Programming"/></disussionForumHome>
![Page 78: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/78.jpg)
XSL | Atul Kahate 85
discussionForumHome.xsl<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <html> <head> <title>Discussion Forum Home Page</title> </head> <body> <h1>Discussion Forum Home Page</h1> <h3>Please select a message board to view:</h3> <ul> <xsl:apply-templates select ="disussionForumHome/messageBoard"/> </ul> </body> </html></xsl:template>
<xsl:template match ="messageBoard"> <li> <a href ="viewForum?id={@id}"> <xsl:value-of select="@name"/> </a> </li> </xsl:template> </xsl:stylesheet>
![Page 79: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/79.jpg)
XSL | Atul Kahate 86
<xsl:template match = “/”> Read this as: Start processing the
XML document at the root of the document
/ indicates root There are some details
underneath, as explained next
![Page 80: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/80.jpg)
XSL | Atul Kahate 87
Understanding <xsl:template-match> - 1<xsl:template match="/"> <html> <head> <title>Discussion Forum Home Page</title> </head> <body> <h1>Discussion Forum Home Page</h1> <h3>Please select a message board to view:</h3> <ul> <xsl:apply-templates select ="disussionForumHome/messageBoard"/> </ul> </body> </html></xsl:template>
Once root is located, start outputting HTML tags as shown, until the <xsl:apply-templates select ="disussionForumHome/messageBoard"/> is encountered
![Page 81: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/81.jpg)
XSL | Atul Kahate 88
Understanding <xsl:template-match> - 2 <xsl:template match>
Has four optional attributes match – Almost always necessary, takes an
Xpath expression as an argument. When the current node matches the node set defined in this expression, the template is executed.
name – Allows us to refer to the template from elsewhere in the document
priority – NA mode – NA
![Page 82: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/82.jpg)
XSL | Atul Kahate 89
Understanding <xsl:template-match> - 3 But the XSLT also has one more
<xsl:template> element as follows: <xsl:template match ="messageBoard">
Why does this not get the processor’s attention?
This is because by default, only the root is loaded; all other templates must be explicitly called by other parts of the XSLT code, as we shall discuss shortly
![Page 83: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/83.jpg)
XSL | Atul Kahate 90
<xsl:apply-templates> - 1 Tells the XSLT processor to
Begin a new search for elements in the source XML document that match the search pattern
And to look for a matching <xsl:template> element in the XSLT for the same element
Here, we have: <xsl:apply-templates select ="disussionForumHome/messageBoard"/>
Hence, the XSLT processor searches for A pattern disussionForumHome/messageBoard in the XML document A <template-match> element for the same in the
XSLT document
![Page 84: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/84.jpg)
XSL | Atul Kahate 91
<xsl:apply-templates> - 2 The <xsl:apply-templates> element works recursively Here, it tells the XSLT processor to first select the
<discussionForumHome> elements of the current node
Current node here is the root element of the XML document
Hence, it selects all the <discussionForumHome> elements at the root level, which means just one element
However, if we had more elements with the same name deeper in the hierarchy, they would have been ignored
![Page 85: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/85.jpg)
XSL | Atul Kahate 92
<xsl:apply-templates> - 3 Assuming that the XSLT processor locates the
<discussionForumHome> element, it searches for all of its <messageBoard> children
For each <messageBoard> child, the processor looks for the template in our stylesheet that provides the best match
Since our stylesheet contains a template that exactly matches the <messageBoard> pattern, it is instantiated for each of the <messageBoard> elements in the source XML
![Page 86: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/86.jpg)
XSL | Atul Kahate 93
<xsl:template match = “messageBoard”> This template gets invoked for each
instance of the <messageBoard> element <xsl:template match ="messageBoard"> <li> <a href ="viewForum?id={@id}"> <xsl:value-of select="@name"/> </a> </li> </xsl:template>
In each case, it produces a line item, consisting of a hyperlink, displaying the name attribute of the <messageBoard> element, and embedding the id attribute in the URL
![Page 87: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/87.jpg)
XSL | Atul Kahate 94
Summary Most transformation in XSLT is driven by two
elements, <xsl:template> and <xsl:apply-templates>.
Processing begins at root, and then: For each X in the current node, processor searches for all
<xsl:template match = “pattern”> elements in the stylesheet that potentially match the node.
The selected <xsl:template match = “pattern”> is instantiated using node X as its current node. This templates typically copies data from the source XML, or produces brand new content in combination with the source data.
If the template contains <xsl:apply-templates select = “newPattern” />, a new current node is created and the process repeats recursively.
![Page 88: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/88.jpg)
XSL | Atul Kahate 95
Comparing <xsl:template> to <xsl:apply-template> Think about the former as similar
to a Java method definition, and the later as invoking that method
![Page 89: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/89.jpg)
XSL | Atul Kahate 96
Another Example college.xml<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href="college.xsl" type="text/xsl"?><college> <name>SICSR</name> <city>Pune</city> <state>Maharashtra</state></college>
college.xsl<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="college"> <b> <xsl:value-of select ="name"/> is located in <xsl:value-of select ="city"/>, <xsl:value-of select ="state"/>. </b></xsl:template>
</xsl:stylesheet>
![Page 90: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/90.jpg)
XSL | Atul Kahate 97
Explanation Elements that do not start with <xsl:>
are simply copied into the result tree <xsl:value of> copies the value of
something in the XML source tree to the result tree
Here, current node is <college>, so <xsl:value-of select = “name”/> selects the text content of the <name> element inside <school>
![Page 91: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/91.jpg)
XSL | Atul Kahate 98
An Example for Conceptual Clarity <customer>
<customer> (Many instance) <name> (Many instances)
<xsl:template match="customers"> <ul> <xsl:apply-templates select ="customer"/> </ul></xsl:template>
<xsl:template match ="customer"> <!– Loops over all customer instances <li> <xsl:value-of select ="name"/> </li></xsl:template>
</xsl:stylesheet>
![Page 92: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/92.jpg)
XSL | Atul Kahate 99
Value-of select = ‘.’ XML
<?xml version="1.0"?><?xml-stylesheet href="test.xsl" type="text/xsl"?><xslTutorial> <bold>Hello, world.</bold> <red>I am </red> <italic>fine.</italic> </xslTutorial>
XSL<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:template match="bold"> <P><B><xsl:value-of select="."/></B></P> </xsl:template> <xsl:template match="red"> <P style="color:red"><xsl:value-of select="."/></P> </xsl:template> <xsl:template match="italic"> <P><i><xsl:value-of select="."/></i></P> </xsl:template> </xsl:stylesheet>
![Page 93: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/93.jpg)
XSL | Atul Kahate 100
Another Example – Can be Confusing! What would be the output? XML
<?xml version="1.0"?><?xml-stylesheet href="test.xsl" type="text/xsl"?><xslTutorial> <employee> <firstName>Joe</firstName> <surName>Smith</surName> </employee> </xslTutorial>
XSL<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match="employee"> <B><xsl:value-of select="."/></B> </xsl:template> <xsl:template match="surName"> <i><xsl:value-of select="."/></i> </xsl:template> </xsl:stylesheet>
![Page 94: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/94.jpg)
XSL | Atul Kahate 101
Explanation XSLT tries to process the first match (at the
outermost possible level), i.e. on xslTutorial – There is none
So, it tries to find a match on the next level, which is employee; and executes code inside
Now, anything inside the employee tag has to be processed while inside the employee template itself
But surName is outside of employee, and hence will be ignored
![Page 95: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/95.jpg)
XSL | Atul Kahate 102
Modified Example Is this correct now?
XML <?xml version="1.0"?> <?xml-stylesheet href="employee.xsl" type="text/xsl"?> <xslTutorial> <employee> <firstName>Joe</firstName> <middleName>Angus</middleName> <surName>Smith</surName> </employee> </xslTutorial>
XSL <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match="/xslTutorial/employee"> <B><xsl:value-of select="."/></B> <xsl:template match="surName"> <i><xsl:value-of select="."/></i> </xsl:template> </xsl:template> <xsl:template match="/xslTutorial/employee/middleName"> <xsl:value-of select="middleName"/> </xsl:template>
</xsl:stylesheet>
![Page 96: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/96.jpg)
XSL | Atul Kahate 103
Analysis No! Inside an <xsl:template-match>,
another <xsl:template match> cannot exist
How to print the last name, then?
![Page 97: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/97.jpg)
XSL | Atul Kahate 104
Modified Example XML
<?xml version="1.0"?> <?xml-stylesheet href="employee.xsl" type="text/xsl"?> <xslTutorial> <employee> <firstName>Joe</firstName> <middleName>Angus</middleName> <surName>Smith</surName> </employee> </xslTutorial>
XSL <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match="/xslTutorial/employee"> <B><xsl:value-of select="."/></B> <xsl:apply-templates /> </xsl:template>
<xsl:template match="/xslTutorial/employee/surName"> <xsl:value-of select=“."/> </xsl:template>
</xsl:stylesheet>
![Page 98: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/98.jpg)
XSL | Atul Kahate 105
Another Version XSL <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match="/xslTutorial/employee"> <B><xsl:value-of select="."/></B> <xsl:apply-templates /> </xsl:template>
<xsl:template match="/xslTutorial/employee/firstName"> <h1> <xsl:value-of select="."/> </h1> </xsl:template>
<xsl:template match="/xslTutorial/employee/middleName"> <i> <xsl:value-of select="."/> </i> </xsl:template>
<xsl:template match="/xslTutorial/employee/surName"> <h2> <xsl:value-of select="."/> </h2> </xsl:template>
</xsl:stylesheet>
![Page 99: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/99.jpg)
XSL | Atul Kahate 106
Modified Further <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match="/xslTutorial/employee"> <B><xsl:value-of select="."/></B> <xsl:apply-templates /> </xsl:template>
<xsl:template match="/xslTutorial/employee/firstName"> <h1> <xsl:value-of select="."/> </h1> </xsl:template>
<!-- <xsl:template match="/xslTutorial/employee/middleName"> <i> <xsl:value-of select="."/> </i> </xsl:template> -->
<xsl:template match="/xslTutorial/employee/surName"> <h2> <xsl:value-of select="."/> </h2> </xsl:template>
</xsl:stylesheet>
![Page 100: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/100.jpg)
XSL | Atul Kahate 107
Modified Further <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match="/xslTutorial/employee"> <B><xsl:value-of select="."/></B> <xsl:apply-templates /> </xsl:template>
<!--
<xsl:template match="/xslTutorial/employee/firstName"> <h1> <xsl:value-of select="."/> </h1> </xsl:template>
<xsl:template match="/xslTutorial/employee/middleName"> <i> <xsl:value-of select="."/> </i> </xsl:template>
<xsl:template match="/xslTutorial/employee/surName"> <h2> <xsl:value-of select="."/> </h2> </xsl:template> -->
</xsl:stylesheet>
![Page 101: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/101.jpg)
XSL | Atul Kahate 108
Yet Another Version – Only middle name would get displayed after the complete name <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match="/xslTutorial/employee"> <B><xsl:value-of select="."/></B> <xsl:apply-templates select=“middleName”/> </xsl:template>
<xsl:template match="/xslTutorial/employee/middleName"> <i> <xsl:value-of select="."/> </i> </xsl:template>
<xsl:template match="/xslTutorial/employee/surName"> <h2> <xsl:value-of select="."/> </h2> </xsl:template>
</xsl:stylesheet>
![Page 102: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/102.jpg)
XSL | Atul Kahate 109
Controlling the Output Method Try adding
<xsl:output method=“html” /> <xsl:output method=“xml” /> <xsl:output method=“text” />
one after the other Run the example from the command prompt
as: set CLASSPATH=c:\xalan\bin\xalan.jar java org.apache.xalan.xslt.Process -INDENT 3 -IN
employee.xml -XSL employee.xsl -OUT output.html
![Page 103: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/103.jpg)
More XSLT Examples
![Page 104: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/104.jpg)
XSL | Atul Kahate 111
First XSL Example: Hello World! XML Document (HelloWorld.xml)
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="HelloWorld.xsl" type="text/xsl"?><msg>Hello World!</msg>
XSL Document (HelloWorld.xsl)<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text"/><xsl:template match="msg">Found it!</xsl:template>
</xsl:stylesheet>
![Page 105: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/105.jpg)
XSL | Atul Kahate 112
Second XSL example XML Document (second.xml)
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="second.xsl" type="text/xsl"?><message>We can easily output XML using XSLT!</message>
XSL Document (second.xsl)<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text"/><xsl:template match="/">Message in XML document is: <xsl:apply-templates/>!</xsl:template>
</xsl:stylesheet>
![Page 106: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/106.jpg)
XSL | Atul Kahate 113
Third XSL Example XML document (third.xml)
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="third.xsl" type="text/xsl"?><name>
<first>Sachin</first><last> Tendukar</last>
</name> XSL document (third.xsl)
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="name"><html>
<head><title>XSL Output Example</title>
</head><body>
<p><xsl:apply-templates select="first"/>
</p><p>
<xsl:apply-templates select="last"/></p>
</body></html>
</xsl:template></xsl:stylesheet>
![Page 107: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/107.jpg)
XPath Basics
![Page 108: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/108.jpg)
XSL | Atul Kahate 115
Nodes XPath views a document as a tree This tree consists of nodes One node can contain other child
nodes There are 7 types of nodes
root, element, attribute, text, comment, processing instruction, and namespace
![Page 109: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/109.jpg)
XSL | Atul Kahate 116
Sample XML Document<?xml version = “1.0”?><!-- This is a comment --><BOOK author = “Andrew Tanenbaum” edition =
“3”><REVIEW> This is a wonderful book!</REVIEW>
Computer Networks</BOOK>
![Page 110: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/110.jpg)
XSL | Atul Kahate 117
XPath ViewRoot
CommentThis is a comment
ElementBOOK
Attributeauthor
Andrew Tanenbaum
Attributeedition
3
ElementREVIEW
TextThis is a wonderful book!
TextComputer Networks
![Page 111: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/111.jpg)
XSL | Atul Kahate 118
XPath Basics XPath allows selection of
nodes/attributes based on certain conditions
XSLT processes these nodes XPath expressions
Criteria for selection of nodes/attributes Location path
Similar to street directions: Used for locating information in an XML document
![Page 112: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/112.jpg)
XSL | Atul Kahate 119
XPath Example child::chapter[child::title]
Look for child nodes of the current node (called as the context node) representing the <chapter> element
Within that, look only for child nodes that represent the <title> element
<chapter><title>
![Page 113: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/113.jpg)
XSL | Atul Kahate 120
XPath Examples – 1Syntax Meaning Examplechild::paragra
phSelect the
<paragraph> child element nodes of the context node.
If context is book, empty node-set would be returned. If context node is <section> element in chapter 2 with attribute number =“1”, a node-set containing four paragraph nodes would be returned.
child::* Select all element node children of the context node. Children other than the element node are not selected.
If context node is the <book> element, the node-set containing <title>, <chapters> and <appendices> nodes would be returned.
child::text() Select all text node children of the context node.
If context node is the <book> element, an empty node-set would be returned. If the context node is <paragraph> number 1 in <section> 2 of <chapter> 2, the returned node-set would be the text node with value First paragraph.
![Page 114: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/114.jpg)
XSL | Atul Kahate 121
XPath Examples – 2Syntax Meaning Example
child::node() Select all the child nodes of the context node. Note that this will return non-elements also.
NA
attribute::number
Select all attribute nodes with name number under the context node.
NA
attribute::* Select all attribute nodes of the context node.
If context node is the <chapter> 1 element, a node-set containing two attribute nodes would be returned, representing the number and title attributes.
![Page 115: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/115.jpg)
XSL | Atul Kahate 122
XPath Examples – 3Syntax Meaning Exampledescendant::p
aragraphSelect all <paragraph>
elements that are descendants of the context node.
If the context node is <book> or <chapters> element, we would get a node-set consisting of six <paragraph> nodes.
If the context node is <section> 1 element for <chapter> 2, we would get a node-set consisting of four <paragraph> nodes.
ancestor-or-self::chapter
Select the <chapter> element nodes that are ancestors of the context node. If the context node is a <chapter> element, return that also.
If the context node is <chapters>, an empty node-set would be returned. If the context node is a <section>, the result would be a node-set containing one <chapter> element which contains this <section> element.
self:paragraph Select the context node if it is the <paragraph> element.
NA
![Page 116: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/116.jpg)
XSL | Atul Kahate 123
attribute::reviewer @reviewer Attribute reviewer of the context node.
attribute::* @* All attributes of the context node.
parent::node ()/attribute::reviewer ..@reviewer Attribute reviewer of the parent of the context node.
child::AUTHOR [position () = 1] AUTHOR [1] First AUTHOR child node of the context node.
child::AUTHOR [position () = last ()]
AUTHOR [last ()] Last AUTHOR child node of the context node.
child::REVIEW [attribute::reviewer = “Jui”]
REVIEW [@reviewer = “Jui”] All REVIEW element children of the context node having a reviewer attribute with a value of Jui.
child::REVIEW [attribute::reviewer = “Jui’] [2]
REVIEW [@reviewer = “Jui”] [2] Second REVIEW child of
the context node having a reviewer attribute with a value of Jui.
![Page 117: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/117.jpg)
XSL | Atul Kahate 124
Template Rules Describes how an XML element node is
converted into an XSL element node for displaying
Examples<xsl: template match=“/article/title”><xsl: template match=“line”><xsl: template match=“city/line”><xsl: template match=“content//line”><xsl: template match=“title | line”><xsl:template match=“/article/*”<xsl:template match=“/article/section[2]/title/text()”
![Page 118: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/118.jpg)
XSL | Atul Kahate 125
<xsl:value-of> Element The <xsl:value-of> element can be
used to select the value of an XML element and add it to the output stream of the transformation
The value of the required select attribute contains an XPath expression
It works like navigating a file system where a forward slash (/) selects subdirectories
![Page 119: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/119.jpg)
XSL | Atul Kahate 126
XSLT Example Consider the following XML document<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="history.xsl"?><subject>
<info>History of India</info></subject> We can write the following XSLT code to transform this into
HTML<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="subject"><html>
<head><title>Hello World</title></head><body>
<h2> <xsl:value-of select="info"/> </h2></body>
</html></xsl:template>
</xsl:stylesheet>
![Page 120: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/120.jpg)
XSL | Atul Kahate 127
Exercise Write an XSLT document for the following XML
document to display it as HTML
<?xml version = “1.0” ?><?xml:stylesheet type = “text/xsl” href = “one.xsl”?
><myPerson>
<personName>Sachin Tendulkar</personName></myPerson>
![Page 121: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/121.jpg)
XSL | Atul Kahate 128
Solution<xsl:stylesheet version = “1.0” xmlns:xsl =
“http://www/w3.org/1999/XSL/Transform”><xsl:template match = “myPerson”>
<html><body>
<b> <xsl:value-of select = “personName”/> </b>
</body></html>
</xsl:template></xsl:stylesheet>
![Page 122: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/122.jpg)
XSL | Atul Kahate 129
Exercise Consider the following XML file:
<?xml version=“1.0”?><BOOK>
<BOOK_TITLE>Computer Networks</BOOK_TITLE><AUTHOR>Tanenbaum</AUTHOR>
</BOOK>
Use XSL to display title and author as level 1 and level 2 headers, respectively
![Page 123: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/123.jpg)
XSL | Atul Kahate 130
Solution<xsl:stylesheet version=“1.0”
xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”><xsl:template match=“BOOK”>
<html><head><title> Book Information </title></head><body> <h1><xsl:value-of
select=“BOOK_TITLE”/></h1> <h2>by <xsl:value-of
select=“AUTHOR”/></h2></body>
</html></xsl:template></xsl:stylesheet>
![Page 124: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/124.jpg)
XSL | Atul Kahate 131
Exercise Consider this XML and write an XSL to display only the book title and price
<?xml version = “1.0” ?><?xml version = "1.0" ?><?xml:stylesheet type = "text/xsl" href = "book2.xsl"?>
<CATALOG><BOOK>
<TITLE>Computer Networks</TITLE><AUTHORS>
<AUTHOR>Andrew Tanenbaum</AUTHOR></AUTHORS><PUBYEAR>2003</PUBYEAR><PRICE>250</PRICE>
</BOOK><BOOK>
<TITLE>Computer Fundamentals</TITLE ><AUTHORS>
<AUTHOR>Rajaraman</AUTHOR><AUTHOR>Ghosh</AUTHOR>
</AUTHORS><PUBYEAR>2002</PUBYEAR><PRICE>250</PRICE>
</BOOK></CATALOG>
![Page 125: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/125.jpg)
XSL | Atul Kahate 132
Solution<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="BOOK">Book Name: <xsl:value-of select="TITLE"/> Price: <xsl:value-of select="PRICE"/></xsl:template>
</xsl:stylesheet>
![Page 126: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/126.jpg)
XSL | Atul Kahate 133
Exercise Consider the following XML document, titled emp.xml:<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="emp.xsl"?><EMP_INFO>
<EMPLOYEE><EMP_NAME empID="9662">
<FIRST>Sachin</FIRST><LAST>Tendulkar</LAST>
</EMP_NAME></EMPLOYEE>
</EMP_INFO> Write emp.xsl file mentioned above, which would:
Display a heading Emp Name:, followed by the employee’s name.
Display the employee id below this, in a smaller font.
![Page 127: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/127.jpg)
XSL | Atul Kahate 134
Solution<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="EMP_INFO"> <html> <head><title>Emp Info!</title></head>
<body> <h1>Emp Name: <xsl:value-of select="EMPLOYEE/EMP_NAME/FIRST"/>
<xsl:value-of select="EMPLOYEE/EMP_NAME/LAST"/> </h1>
<h3> <xsl:value-of select="EMPLOYEE/EMP_NAME/@empID"/></h3> </body>
</html></xsl:template></xsl:stylesheet>
![Page 128: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/128.jpg)
Concept of apply-templates
![Page 129: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/129.jpg)
XSL | Atul Kahate 136
apply-templates We know that <xsl:template
match=“…”> allows us to search for a location path in our XML document
Another XSLT syntax, <xsl:apply-templates/> allows us to list the contents of the elements with reference to the previous <xsl:template match=“…”> declaration
Examples follow
![Page 130: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/130.jpg)
XSL | Atul Kahate 137
Source XML (apply.xml)<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="apply1.xsl"?><book>
<title>Profesional XSL</title><chapters>
<chapter><chapterNo>2</chapterNo><chapterTopic>XPath</chapterTopic><chapterAuthor>Andrew Watt</chapterAuthor><chapterSections><chapterSection>Section 1</chapterSection><chapterSection>Section 2</chapterSection><chapterSection>Section 3</chapterSection><chapterSection>Section 4</chapterSection><chapterSection>Section 5</chapterSection><chapterSection>Section 6</chapterSection></chapterSections></chapter>
<chapter><chapterNo>3</chapterNo><chapterTopic>XSLT Basics</chapterTopic><chapterAuthor>Paul Spencer</chapterAuthor><chapterSections><chapterSection>Section 1</chapterSection><chapterSection>Section 2</chapterSection><chapterSection>Section 3</chapterSection><chapterSection>Section 4</chapterSection><chapterSection>Section 5</chapterSection><chapterSection>Section 6</chapterSection></chapterSections></chapter><chapter><chapterNo>4</chapterNo><chapterTopic>Modular XSLT</chapterTopic><chapterAuthor>Kurt Cagle</chapterAuthor><chapterSections><chapterSection>Section 1</chapterSection><chapterSection>Section 2</chapterSection><chapterSection>Section 3</chapterSection><chapterSection>Section 4</chapterSection><chapterSection>Section 5</chapterSection><chapterSection>Section 6</chapterSection></chapterSections></chapter></chapters>
</book>
![Page 131: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/131.jpg)
XSL | Atul Kahate 138
Basic XSL Example (apply0.xml) <xsl:stylesheet
xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match="/"> </xsl:template>
</xsl:stylesheet> What would be the output?
![Page 132: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/132.jpg)
XSL | Atul Kahate 139
Explanation We have not specified what action
should be taken when root is applied
This causes the entire output to be suppressed!
![Page 133: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/133.jpg)
XSL | Atul Kahate 140
XSL Example: 1 (apply1.xsl)<?xml version="1.0"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"><xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
Output: ?
![Page 134: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/134.jpg)
XSL | Atul Kahate 141
Explanation Now there is an <apply-templates>
inside the <template match> This causes the default <apply-
templates> to be applied, i.e. without any particular select inside <apply-templates>
In other words, <apply-templates> gets executed for all elements inside the root
![Page 135: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/135.jpg)
XSL | Atul Kahate 142
XSL Example: 2 (apply2.xsl)<?xml version="1.0"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"><xsl:apply-templates/>
</xsl:template>
<xsl:template match="*"></xsl:template>
</xsl:stylesheet>
![Page 136: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/136.jpg)
XSL | Atul Kahate 143
Explanation Empty output, since <apply-
templates/> will bring search from the root level to all non-root elements.
But at that level, there is no <apply-templates/> to display anything, unlike in the previous example.
![Page 137: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/137.jpg)
XSL | Atul Kahate 144
XSL Example: 3 (apply3.xsl) <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="*"> </xsl:template>
<xsl:template match="book"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="chapters"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="chapter"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="chapterTopic"> <!-- <xsl:apply-templates/> --> <xsl:value-of select="."/> </xsl:template>
</xsl:stylesheet>
Display the list of chapter topics
![Page 138: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/138.jpg)
XSL | Atul Kahate 145
XSL Example: 4 (apply4.xsl) <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="*"> </xsl:template>
<xsl:template match="book"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="chapters"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="chapter"> <xsl:apply-templates/> </xsl:template>
<xsl:template match="/book/chapters/chapter/chapterNo"> <xsl:value-of select="."/> </xsl:template>
<xsl:template match="/book/chapters/chapter/chapterTopic"> <xsl:value-of select="."/> </xsl:template>
<xsl:template match="/book/chapters/chapter/chapterAuthor"> <xsl:value-of select="."/> </xsl:template>
</xsl:stylesheet>
Display element values for all the selected elements
![Page 139: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/139.jpg)
XSL | Atul Kahate 146
XSL Example: 6 (apply6.xsl) - Tricky<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/
1999/XSL/Transform">
</xsl:stylesheet>
![Page 140: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/140.jpg)
XSL | Atul Kahate 147
XSL Example: 5 (apply5.xsl) – Tricky! What if we remove all search paths except the absolute ones?<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/book/chapters/chapter/chapterNo"><xsl:value-of select="."/>
</xsl:template>
<xsl:template match="/book/chapters/chapter/chapterTopic"><xsl:value-of select="."/>
</xsl:template>
<xsl:template match="/book/chapters/chapter/chapterAuthor"><xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
![Page 141: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/141.jpg)
XSL | Atul Kahate 148
Explanation Here, there is no <apply-
templates> calling any of the defined <template match> tags
Hence, our <template match> tags would get ignored completely
Hence, it would produce the full XML contents as the output
![Page 142: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/142.jpg)
Using the Mode Attribute
![Page 143: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/143.jpg)
XSL | Atul Kahate 150
Using Mode If more than one template matches an
identical pattern, a conflict arises This can be solved by using template
priority, but at times, that is also ambiguous
In such situations, we can use the template mode
Useful when a template needs to visit the same node, but with different results
![Page 144: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/144.jpg)
XSL | Atul Kahate 151
Mode Example, also uses CSS
XML (css-example-1) <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="css-example-1.xsl"?> <us> <state name="Hawaii"> <county name="Hawaii"> <city class="largest">Hilo</city> </county> <county name="Honolulu"> <city class="largest">Honolulu</city> </county> <county name="Kauai"> <city class="largest">Kapaa</city> </county> <county name="Maui"> <city class="largest">Kahului</city> </county> </state> </us>
XSL <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="us/state"> <html> <head> <title>State: <xsl:value-of select="@name"/> </title> <style type="text/css"> h1, h2 {font-family: sans-serif, color: blue} ul {font-size: 16pt} </style> </head> <body> <h1> State: <xsl:value-of select="@name"/> </h1> <h2>All Countries</h2> <ul> <xsl:apply-templates select="county" mode="county"/> </ul> <h2>Largest Cities (by County)</h2> <ul> <xsl:apply-templates select="county" mode="city"/> </ul> </body> </html> </xsl:template> <xsl:template match="county" mode="county"> <li> <xsl:value-of select="@name"/> </li> </xsl:template> <xsl:template match="county" mode="city"> <li> <xsl:value-of select="city"/> (<xsl:value-of select="@name"/>) </li> </xsl:template> </xsl:stylesheet>
![Page 145: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/145.jpg)
Creating New Elements and Attributes
![Page 146: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/146.jpg)
XSL | Atul Kahate 153
Creating Elements and Attributes<?xml version="1.0"?><students>
<student first_name="Raju"><id>101</id><remarks> A student who is not at all
sincere!</remarks></student><student first_name="Aarati">
<id>102</id><remarks> A student who is really quite dedicated to
her studies!</remarks></student><student first_name="Rajani">
<id>103</id><remarks> A student who is awesome!</remarks>
</student></students>
![Page 147: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/147.jpg)
XSL | Atul Kahate 154
Corresponding XSL<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"><xsl:apply-templates/>
</xsl:template><xsl:template match="students">
<students><xsl:apply-templates/>
</students></xsl:template><xsl:template match="student">
<xsl:element name="{@first_name}"><xsl:attribute name="id"><xsl:value-of
select="id"/></xsl:attribute><notes>
<xsl:value-of select="remarks"/></notes>
</xsl:element></xsl:template>
</xsl:stylesheet>
![Page 148: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/148.jpg)
XSL | Atul Kahate 155
Explanation - 1<xsl:template match="/">
<xsl:apply-templates/></xsl:template> match = “/” means select root <xsl:apply-templates/> means
look for a “xsl:template match” at the root level; i.e. look for a definition that says <xsl:template match=“students">
![Page 149: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/149.jpg)
XSL | Atul Kahate 156
Explanation – 2<xsl:template match="students">
<students><xsl:apply-templates/></students></xsl:template>
When the students element is found, output <students> </students>
Then look for a match inside <students> tag, i.e. for <student> tag now
![Page 150: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/150.jpg)
XSL | Atul Kahate 157
Explanation – 3<xsl:template match="student">
<xsl:element name="{@first_name}"><xsl:attribute name="id"><xsl:value-of select="id"/></xsl:attribute><notes><xsl:value-of select="remarks"/></notes></xsl:element></xsl:template>
When the <student> element is found, create a new element in the output XML whose element name equals the value of the attribute first_name in the input XML
So:<student first_name="Raju">
<id>101</id><remarks> A student who is not at all sincere!</remarks>
</student> Will now become
<Raju> </Raju>
![Page 151: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/151.jpg)
XSL | Atul Kahate 158
Explanation – 4<xsl:attribute name="id">
<xsl:value-of select="id"/></xsl:attribute>
Add an attribute named id to the output XML, which equals the value of the element id of the input XML
![Page 152: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/152.jpg)
XSL | Atul Kahate 159
Explanation – 5<notes>
<xsl:value-of select="remarks"/></notes>
Add a new element called as notes to the output XML, which should contain the value of the remarks element of the input XML
![Page 153: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/153.jpg)
XSL | Atul Kahate 160
Explanation – 6 Input XML
<student first_name="Raju"><id>101</id><remarks> A student who is not at all sincere!</remarks>
</student>
Output XML <Raju id = “101”> <comments> A student who is not at all
sincere!</comments> </Raju>
![Page 154: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/154.jpg)
XSL | Atul Kahate 161
Running the Example set CLASSPATH=C:\xalan\
xalan.jar;C:\xalan.xerces.jar
java org.apache.xalan.xslt.Process -INDENT 3 -IN three.xml -XSL three.xsl -OUT output.xml
![Page 155: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/155.jpg)
XSL | Atul Kahate 162
Xalan and Xerces Xalan: Fully implements XSLT,
XPath, and JAXP Xerces: Implements XML
specifications, namespaces, schema, SAX, DOM, and JAXP
![Page 156: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/156.jpg)
Looping using for-each
![Page 157: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/157.jpg)
XSL | Atul Kahate 164
Example: Change XML Contents into an HTML Table – XML File<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> <cd> <title>Candle in the wind</title> <artist>Elton John</artist> <country>UK</country> <company>HMV</company> <price>8.20</price> <year>1998</year> </cd></catalog>
![Page 158: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/158.jpg)
XSL | Atul Kahate 165
Example: Change XML Contents into an HTML Table – XSL File<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html></xsl:template>
</xsl:stylesheet>
![Page 159: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/159.jpg)
XSL | Atul Kahate 166
Exercise Display name, address, and phone number for all customers in a table <?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="foreach.xsl" ?><customers>
<customer><name>Mahesh Katare</name><address>Eve's Plaza, Bangalore</address><state>Karnataka</state><phone>(80) 3247890</phone></customer><customer><name>Naren Limaye</name><address>Shanti Apartments, Thane</address><state>Maharashtra</state><phone>(22) 82791810</phone></customer><customer><name>Uday Bhalerao</name><address>Kothrud, Pune</address><state>Maharashtra</state><phone>(20) 25530834</phone></customer><customer><name>Amol Kavthekar</name><address>Station Road, Solapur</address><state>Maharashtra</state><phone>(217) 2729345</phone></customer><customer><name>Meghraj Mane</name><address>Cannuaght Place, Delhi</address><state>Delhi</state><phone>(11) 57814091</phone></customer><customer><name>Sameer Joshi</name><address>Gullapetti, Hyderabad</address><state>Andhra Pradesh</state><phone>93717-90911</phone></customer>
</customers>
![Page 160: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/160.jpg)
XSL | Atul Kahate 167
Solution<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:template match="/"> <HTML> <BODY> <TABLE border = "2"> <xsl:for-each select="customers/customer"> <TR> <TD><xsl:value-of select="name" /></TD> <TD><xsl:value-of select="address" /></TD> <TD><xsl:value-of select="phone" /></TD> </TR> </xsl:for-each> </TABLE> </BODY> </HTML> </xsl:template>
![Page 161: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/161.jpg)
XSL | Atul Kahate 168
Exercise Achieve the same results without
using for-each
![Page 162: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/162.jpg)
XSL | Atul Kahate 169
Solution<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"><HTML>
<BODY><TABLE border="2">
<xsl:apply-templates/></TABLE>
</BODY></HTML>
</xsl:template><xsl:template match="customers/customer">
<TR><TD>
<xsl:value-of select="name"/></TD><TD>
<xsl:value-of select="address"/></TD><TD>
<xsl:value-of select="phone"/></TD>
</TR></xsl:template>
</xsl:stylesheet>
![Page 163: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/163.jpg)
Another for-each Example
![Page 164: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/164.jpg)
XSL | Atul Kahate 171
Exercise: XML<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="SalesToHTML.xsl"
type="text/xsl"?><SalesReport>
<Company>i-flex Solutions Limited</Company><Period>2005-06</Period><Sales Region="US">USD 250 Million</Sales><Sales Region="Europe">USD 100 Million</Sales><Sales Region="Asia">USD 50 Million</Sales>
</SalesReport>
![Page 165: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/165.jpg)
XSL | Atul Kahate 172
Solution: XSL <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="/"> <html> <head> <title>Sales Report, <xsl:value-of select="/SalesReport/Company"/>: <xsl:value-of select="/SalesReport/Period"/> </title> </head> <body> <br/> <h2> <xsl:value-of select="/SalesReport/Company"/>, Sales Report: <xsl:value-of select="/SalesReport/Period"/> </h2> <br/> <table width="50%"> <tr> <th>Region</th> <th>Sales</th> </tr> <xsl:for-each select="/SalesReport/Sales"> <tr> <td align="center"> <xsl:value-of select="@Region"/> </td> <td align="center"> <xsl:value-of select="."/> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
![Page 166: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/166.jpg)
Sorting Data
![Page 167: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/167.jpg)
XSL | Atul Kahate 174
Sorting XML
<?xml version="1.0"?><?xml-stylesheet href="test.xsl" type="text/xsl"?><xslTutorial> <name>John</name> <name>Josua</name> <name>Charles</name> <name>Alice</name> <name>Martha</name> <name>George</name> </xslTutorial>
XSL<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0"> <xsl:template match="/"> <TABLE> <xsl:for-each select="//name"> <xsl:sort order="ascending" select="."/> <TR><TH><xsl:value-of select="."/></TH></TR> </xsl:for-each> </TABLE> </xsl:template> </xsl:stylesheet>
![Page 168: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/168.jpg)
XSL | Atul Kahate 175
Sorting Information<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:sort select="artist"/> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html></xsl:template>
</xsl:stylesheet>
![Page 169: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/169.jpg)
XSL | Atul Kahate 176
Sorting – Another Example – XML File
<?xml version="1.0" ?>
<famous-persons>
<persons category="medicine"> <person> <firstname> Edward </firstname> <name> Jenner </name> </person>
<person> <firstname> Gertrude </firstname> <name> Elion </name> </person> </persons>
<persons category="computer science"> <person> <firstname> Charles </firstname> <name> Babbage </name> </person>
<person> <firstname> Alan </firstname> <name> Touring </name> </person>
<person> <firstname> Ada </firstname> <name> Byron </name> </person> </persons>
<persons category="astronomy"> <person> <firstname> Tycho </firstname> <name> Brahe </name> </person>
<person> <firstname> Johannes </firstname> <name> Kepler </name> </person>
<person> <firstname> Galileo </firstname> <name> Galilei </name> </person> </persons>
</famous-persons>
![Page 170: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/170.jpg)
XSL | Atul Kahate 177
Sorting – Another Example – XSLT Write an XSLT for sorting data
appropriately
![Page 171: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/171.jpg)
XSL | Atul Kahate 178
Sorting and Data Types – 1 XML
<?xml version="1.0"?><?xml-stylesheet href="test.xsl" type="text/xsl"?><xslTutorial > <car id="11"/> <car id="6"/> <car id="105"/> <car id="28"/> <car id="9"/> </xslTutorial>
XSL<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0"> <xsl:template match="/"> <TABLE> <xsl:for-each select="//car"> <xsl:sort data-type="text" select="@id"/> <TR><TH><xsl:text> Car-</xsl:text> <xsl:value-of select="@id"/></TH></TR> </xsl:for-each> </TABLE> </xsl:template> </xsl:stylesheet>
![Page 172: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/172.jpg)
XSL | Atul Kahate 179
Sorting and Data Types – 2 Modified XSL
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
<xsl:template match="/"> <TABLE> <xsl:for-each select="//car"> <xsl:sort data-type=“number" select="@id"/> <TR><TH><xsl:text> Car-</xsl:text> <xsl:value-of select="@id"/></TH></TR> </xsl:for-each> </TABLE> </xsl:template> </xsl:stylesheet>
![Page 173: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/173.jpg)
XSL | Atul Kahate 180
Sorting on Multiple Keys Specify multiple xsl:sort elements,
one after the other Example
<xsl:sort select=“SURNAME”/><xsl:sort select=“FIRSTNAME”/><xsl:sort select=“BIRTH_DATE”
order=“ascending”/>
![Page 174: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/174.jpg)
XSL | Atul Kahate 181
Another Sort Example sort-1.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="sort-1.xsl"?> <europe> <state>Belgium</state> <state>Germany</state> <state>United Kingdom</state> <state>France</state> <state>Spain</state> <state>Italy</state> <state>Turkey</state> <state>Sweden</state> <state>Ireland</state> <state>Greece</state> <state>Malta</state> <state>Vatican City</state> <state>Portugal</state> </europe>
sort-1.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="europe"> <xsl:text>Alphabetical List of European States</xsl:text> <xsl:text> Total Number of States: </xsl:text> <xsl:value-of select="count(state)"/> <xsl:text> </xsl:text> <xsl:apply-templates select="state"> <xsl:sort/> </xsl:apply-templates> </xsl:template> <xsl:template match="state"> <xsl:text> - </xsl:text> <xsl:apply-templates/> <xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet>
![Page 175: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/175.jpg)
XSL | Atul Kahate 182
Producing HTML Output <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="europe"> <html> <head> <title>European States</title> </head> <style type="text/css">body {font-family: sans-serif}</style> <body> <h3>Alphabetical List of European States</h3> <p> <b>Total Number of States:</b> <xsl:value-of select="count(state)"/> </p> <ul> <xsl:apply-templates select="state"> <xsl:sort/> </xsl:apply-templates> </ul> </body> </html> </xsl:template> <xsl:template match="state"> <li> <xsl:apply-templates/> </li> </xsl:template> </xsl:stylesheet>
![Page 176: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/176.jpg)
XSL | Atul Kahate 183
Sorting on Attributes and Formatting <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="europe"> <xsl:text>Number of EU Member States: </xsl:text> <xsl:value-of select="count(state)"/> <xsl:text> </xsl:text> <xsl:apply-templates select="state/@joined"> <xsl:sort data-type="number"/> </xsl:apply-templates> <xsl:text> </xsl:text> </xsl:template> <xsl:template match="state/@joined"> <xsl:text> - </xsl:text> <xsl:apply-templates select=".."/> <xsl:text> (</xsl:text> <xsl:value-of select="."/> <xsl:text>) </xsl:text> </xsl:template> </xsl:stylesheet>
![Page 177: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/177.jpg)
XSL | Atul Kahate 184
Another Sort Example for Multiple Fields
item-list.xml <?xml version="1.0" encoding="UTF-8"?> <list> <freezer> <item>peas</item> <item>green beans</item> <item>pot pie</item> <item>ice cream</item> </freezer> <bakery> <item>rolls</item> <item>jelly doughnuts</item> <item>bread</item> </bakery> <produce> <item>tomato</item> <item>apple</item> <item>potato</item> </produce> </list>
item-list.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="list"> <xsl:apply-templates select="*"> <xsl:sort select="name()"/> </xsl:apply-templates> </xsl:template> <xsl:template match="*"> <xsl:text>Section: </xsl:text> <xsl:value-of select="name()"/> <xsl:text> </xsl:text> <xsl:apply-templates select="item"> <xsl:sort/> </xsl:apply-templates> </xsl:template> <xsl:template match="item"> <xsl:text> * </xsl:text> <xsl:apply-templates/> <xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet>
![Page 178: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/178.jpg)
XSL | Atul Kahate 185
Explanation The first template matches the list element
and sorts on the names (using name ()) of the element children (using *) of the list This is the first sort
The second template matches only on the element children of list, again using * After inserting some text (such as Section:), and
the name of the element (again using name()), the template sorts the text node content of item children
This is the second sort
![Page 179: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/179.jpg)
Conditional Processing
![Page 180: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/180.jpg)
XSL | Atul Kahate 187
Writing Conditions Using <xsl:if><?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:if test="price > 10"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:if> </xsl:for-each> </table> </body> </html></xsl:template></xsl:stylesheet>
![Page 181: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/181.jpg)
XSL | Atul Kahate 188
<xsl:apply-templates> Element The <xsl:apply-templates>
element applies a template rule to the current element or to the current element's child nodes
Example follows
![Page 182: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/182.jpg)
XSL | Atul Kahate 189
Exercise Consider the following XML document<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="books3.xsl"?>
<BOOKS><BOOK pubyear="1929">
<BOOK_TITLE>Look Homeward, Angel</BOOK_TITLE><AUTHOR>Wolfe, Thomas</AUTHOR>
</BOOK><BOOK pubyear="1973">
<BOOK_TITLE>Gravity's Rainbow</BOOK_TITLE><AUTHOR>Pynchon, Thomas</AUTHOR>
</BOOK><BOOK pubyear="1977">
<BOOK_TITLE>Cards as Weapons</BOOK_TITLE><AUTHOR>Jay, Ricky</AUTHOR>
</BOOK><BOOK pubyear="2001">
<BOOK_TITLE>Computer Networks</BOOK_TITLE><AUTHOR>Tanenbaum, Andrew</AUTHOR>
</BOOK></BOOKS> Do the following:
1. Display all the books published in the 1970s.2. Display the same information in a tabular form with an asterisk against the book title.3. Display the same information as in (2), sorted on author name.
![Page 183: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/183.jpg)
XSL | Atul Kahate 190
Solution Refer to books.xml, books.xsl,
books2.xsl, books3.xsl
![Page 184: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/184.jpg)
XSL | Atul Kahate 191
Understanding position () and number
XML (functions-example-1) <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="functions-example-1.xsl"?> <europe> <state>Belgium</state> <state>Germany</state> <state>United Kingdom</state> <state>France</state> <state>Spain</state> <state>Italy</state> <state>Turkey</state> <state>Sweden</state> <state>Ireland</state> <state>Greece</state> <state>Malta</state> <state>Vatican City</state> <state>Portugal</state> </europe>
XSL
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <table border="2"> <tbody> <tr> <th>Title</th> <th>Position</th> <th>Number</th> </tr> <xsl:apply-templates select="europe/state"/> </tbody> </table> </xsl:template> <xsl:template match="europe/state"> <tr> <td> <xsl:value-of select="."/> </td> <td align="center"> <xsl:value-of select="position()"/> </td> <td align="center"> <xsl:number/> </td> </tr> </xsl:template> </xsl:stylesheet>
![Page 185: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/185.jpg)
Writing Conditions
![Page 186: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/186.jpg)
XSL | Atul Kahate 193
if Example – 1 Consider an XML file (names.xml) as follows. Display all the names
comma-separated in the output HTML file.
<?xml version='1.0'?><?xml-stylesheet type="text/xsl" href="ifcomma2.xsl" ?><namelist> <name>Albert</name> <name>Terrance</name> <name>Will</name> <name>Sylvia</name> <name>Timothy</name> <name>Gordon</name> <name>James</name> <name>Robert</name> <name>Dan</name> <name>Sasha</name></namelist>
![Page 187: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/187.jpg)
XSL | Atul Kahate 194
if Example – 1<?xml version='1.0'?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="namelist/name"> <xsl:apply-templates/> <xsl:if test="position()!=last()">, </xsl:if></xsl:template>
</xsl:stylesheet>
![Page 188: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/188.jpg)
XSL | Atul Kahate 195
if Example – 2 Another way to achieve the same objective
<?xml version='1.0'?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="namelist/name"> <xsl:if test="position()!=1">, </xsl:if> <xsl:apply-templates/></xsl:template></xsl:stylesheet>
![Page 189: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/189.jpg)
XSL | Atul Kahate 196
if Example – 3 Consider the following XML file (items.xml) and display alternate rows
in yellow background.<?xml version='1.0'?><?xml-stylesheet type="text/xsl" href="ifyellow.xsl" ?><items> <item>Car</item> <item>Pen</item> <item>LP Record</item> <item>Wisdom</item> <item>Cell phone</item> <item>Film projector</item> <item>Hole</item> <item>Canopy</item> <item>Widget</item> <item>Concept</item> <item>Null character</item></items>
![Page 190: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/190.jpg)
XSL | Atul Kahate 197
if Example – 3<?xml version='1.0'?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/"><html><body><table border="1" cellpadding="2" cellspacing="0" width="50%"><xsl:apply-templates/></table></body></html></xsl:template>
<xsl:template match="item"> <tr> <xsl:if test="position() mod 2 = 0"> <xsl:attribute name="bgcolor">yellow</xsl:attribute> </xsl:if> <xsl:apply-templates/> </tr></xsl:template>
</xsl:stylesheet>
![Page 191: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/191.jpg)
XSL | Atul Kahate 198
Writing Conditions Using <xsl:choose><?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <xsl:choose> <xsl:when test="price > 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="artist"/></td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </body> </html></xsl:template>
</xsl:stylesheet>
![Page 192: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/192.jpg)
XSL | Atul Kahate 199
choice Example Consider the following XML file (order.xml). If total number of items selected is <10, display
small, if between 10 and 19, display medium, else large.<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="refchoose.xsl" ?><orders> <order> <lineitem/> <lineitem/> <total>9</total> </order> <order> <lineitem/> <lineitem/> <total>19</total> </order> <order> <lineitem/> <lineitem/> <total>29</total> </order></orders>
![Page 193: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/193.jpg)
XSL | Atul Kahate 200
choice Example<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="order"> <xsl:choose> <xsl:when test="total < 10"> (small) </xsl:when> <xsl:when test="total < 20"> (medium) </xsl:when> <xsl:otherwise> (large) </xsl:otherwise> </xsl:choose> <xsl:apply-templates /> <BR/></xsl:template>
</xsl:stylesheet>
![Page 194: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/194.jpg)
Using Variables
![Page 195: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/195.jpg)
XSL | Atul Kahate 202
XML (Variable-example.xml) <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="Variable-
example.xsl"?> <catalog> <item id="SC-001"> <maker>Reliance</maker> <description>Gas pipe</description> <size>Large</size> <price>15000</price> <currency>INR</currency> </item> </catalog>
![Page 196: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/196.jpg)
XSL | Atul Kahate 203
XSL (Variable-example.xsl) <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:variable name="discount" select="0.10"/> <xsl:template match="catalog"> <xsl:copy> <xsl:apply-templates select="item"/> </xsl:copy> </xsl:template> <xsl:template match="item"> <xsl:copy> <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute> <xsl:copy-of select="maker | description | size | price"/> <discount> <xsl:value-of select="$discount"/> </discount> <discountPrice> <xsl:value-of select="price - (price * $discount)"/> </discountPrice> <xsl:copy-of select="currency"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
![Page 197: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/197.jpg)
XSL | Atul Kahate 204
Running the Example set classpath=c:\xalan\bin\
xalan.jar
java org.apache.xalan.xslt.Process -INDENT 3 -IN Variable-example.xml -XSL Variable-example.xsl -OUT output.xml
![Page 198: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/198.jpg)
XSL | Atul Kahate 205
Using Parameters – Modified XSL <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:param name="discount" select="0.10"/> <xsl:template match="catalog"> <xsl:copy> <xsl:apply-templates select="item"/> </xsl:copy> </xsl:template> <xsl:template match="item"> <xsl:copy> <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute> <xsl:copy-of select="maker | description | size | price"/> <discount> <xsl:value-of select="$discount"/> </discount> <discountPrice> <xsl:value-of select="price - (price * $discount)"/> </discountPrice> <xsl:copy-of select="currency"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
![Page 199: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/199.jpg)
XSL | Atul Kahate 206
What is the Impact? We have changed variable to parameter Now, we can pass the value of discount
from the command prompt! java org.apache.xalan.xslt.Process -
INDENT 3 -param discount 0.20 -IN Variable-example.xml -XSL Variable-example-1.xsl -OUT output.xml
![Page 200: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/200.jpg)
XSL | Atul Kahate 207
<xsl:number> Tag XML
<?xml version="1.0"?><?xml-stylesheet href="test.xsl" type="text/xsl"?><xslTutorial >
<chapter>First Chapter</chapter> <chapter>Second Chapter <chapter>Subchapter 1</chapter> <chapter>Subchapter 2</chapter> </chapter> <chapter>Third Chapter <chapter>Subchapter A</chapter> <chapter>Subchapter B <chapter>sub a</chapter> <chapter>sub b</chapter> </chapter> <chapter>Subchapter C</chapter> </chapter> </xslTutorial>
XSL<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0"> <xsl:template match="/"> <TABLE BORDER="1"> <TR><TH>Number</TH><TH>text</TH></TR> <xsl:for-each select="//chapter"> <TR><TD> <xsl:number/> </TD><TD> <xsl:value-of select="./text()"/> </TD></TR> </xsl:for-each> </TABLE> </xsl:template> </xsl:stylesheet>
![Page 201: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/201.jpg)
XSL | Atul Kahate 208
<xsl:number> Continued Change the <xsl:number> tag to
the following<xsl:number level="multiple"/>
![Page 202: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/202.jpg)
XSL | Atul Kahate 209
Using position () XML (functions-example-2) <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="functions-example-2.xsl"?> <europe> <state>Belgium</state> <state>Germany</state> <state>United Kingdom</state> <state>France</state> <state>Spain</state> <state>Italy</state> <state>Turkey</state> <state>Sweden</state> <state>Ireland</state> <state>Greece</state> <state>Malta</state> <state>Vatican City</state> <state>Portugal</state> </europe>
XSL <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="yes"/> <xsl:template match="europe"> <xsl:apply-templates select="state"/> </xsl:template> <xsl:template match="europe/state"> <xsl:value-of select="position()"/> <xsl:text>. </xsl:text> <xsl:value-of select="."/> <xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet>
![Page 203: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/203.jpg)
XSL | Atul Kahate 210
Now Using number Modified XSL <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="yes"/> <xsl:template match="europe"> <xsl:apply-templates select="state"/> </xsl:template> <xsl:template match="europe/state"> <xsl:number format="1"/> <xsl:text>. </xsl:text> <xsl:value-of select="."/> <xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet>
![Page 204: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/204.jpg)
Using XSL and CSS Together
![Page 205: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/205.jpg)
XSL | Atul Kahate 212
XML <?xml version="1.0"?> <?xml-stylesheet href="test.xsl" type="text/xsl"?> <products> <product href="http://www.playfield.com/text"> <name>Playfield Text</name> <price currency="usd">299</price> <description>Faster than the competition.</description> <version>1.0</version> </product> <product href="http://www.playfield.com/virus"> <name>Playfield Virus</name> <price currency="eur">199</price> <description> Protect yourself against malicious code. </description> <version>5.0</version> </product> <product href="http://www.playfield.com/calc"> <name>Playfield Calc</name> <price currency="usd">299</price> <description>Clear picture on your data.</description> <version>1.5</version> </product> <product href="http://www.playfield.com/db"> <name>Playfield DB</name> <price currency="cad">599</price> <description>Organize your data.</description> </product> </products>
![Page 206: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/206.jpg)
XSL | Atul Kahate 213
XSL <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no"/> <xsl:template match="/products"> <html> <head> <title>Cascading Style Sheet</title> <link rel="stylesheet" type="text/css" href="table.css" title="Style"/> </head> <body> <table> <tr class="header"> <td>Name</td> <td>Price</td> <td>Description</td> </tr> <xsl:apply-templates/> </table> </body> </html> </xsl:template>
<xsl:template match="product[position() mod 2 = 1]"> <tr class="odd"> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="price"/></td> <td><xsl:value-of select="description"/></td> </tr> </xsl:template>
<xsl:template match="product"> <tr class="even"> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="price"/></td> <td><xsl:value-of select="description"/></td> </tr> </xsl:template>
</xsl:stylesheet>
![Page 207: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/207.jpg)
XSL | Atul Kahate 214
CSS .header { background-color:
#999999; font-weight: bold; } .odd { background-color: normal; } .even { background-color: #dfdfdf;
}
![Page 208: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/208.jpg)
Processing Multiple XML Files Using a Single XSL
![Page 209: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/209.jpg)
XSL | Atul Kahate 216
XML File 1 (products.xml) <?xml version="1.0"?> <?xml-stylesheet href="products.xsl" type="text/xsl"?>
<products> <product href="http://www.playfield.com/text"> <name>Playfield Text</name> <price currency="usd">299</price> <description>Faster than the competition.</description> <version>1.0</version> </product> <product href="http://www.playfield.com/virus"> <name>Playfield Virus</name> <price currency="eur">199</price> <description> Protect yourself against malicious code. </description> <version>5.0</version> </product> <product href="http://www.playfield.com/calc"> <name>Playfield Calc</name> <price currency="usd">299</price> <description>Clear picture on your data.</description> <version>1.5</version> </product> <product href="http://www.playfield.com/db"> <name>Playfield DB</name> <price currency="cad">599</price> <description>Organize your data.</description> </product> </products>
![Page 210: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/210.jpg)
XSL | Atul Kahate 217
XML File 2 (currencies.xml) <?xml version="1.0"?> <currencies> <currency> <code>eur</code> <name>Euros</name> </currency> <currency> <code>usd</code> <name>Dollars</name> </currency> <currency> <code>cad</code> <name>Canadian dollars</name> </currency> </currencies>
![Page 211: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/211.jpg)
XSL | Atul Kahate 218
XSL File <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no"/>
<xsl:variable name="currencies" select="document('currencies.xml')/currencies"/>
<xsl:template match="/"> <html> <head><title>Multiple documents</title></head> <body> <table> <tr bgcolor="#999999"> <td>Name</td> <td>Price</td> <td>Description</td> <td>Version</td> </tr> <xsl:apply-templates/> </table> </body> </html> </xsl:template>
<xsl:template match="product"> <xsl:variable name="currency" select="price/@currency"/> <tr> <td><xsl:value-of select="name"/></td> <td> <xsl:value-of select="price"/> <xsl:text> </xsl:text> <xsl:value-of select="$currencies/currency[code=$currency]/name"/> </td> <td><xsl:value-of select="description"/></td> <td><xsl:value-of select="version"/></td> </tr> </xsl:template>
</xsl:stylesheet>
![Page 212: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/212.jpg)
Using XSLT and JavaScript Together (on products.xml)
![Page 213: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/213.jpg)
XSL | Atul Kahate 220
products.xsl modified <?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="no"/>
<xsl:template match="/"> <html> <head> <title>JavaScript</title> <script language="JavaScript"><xsl:comment> // creates and initializes an array of product descriptions var urls = new Array() <xsl:for-each select="products/product"> urls[<xsl:value-of select="position()"/>] = "<xsl:value-of select="@href"/>" </xsl:for-each> // user function function doSelect(i) { open(urls[i]) } // </xsl:comment></script> </head> <body> <ul> <xsl:for-each select="products/product"> <li><a href="javascript:doSelect({position()})"> <xsl:value-of select="name"/> </a></li> </xsl:for-each>
</ul> </body> </html> </xsl:template>
</xsl:stylesheet>
![Page 214: 5 xsl (formatting xml documents)](https://reader035.vdocuments.site/reader035/viewer/2022062310/58f32e561a28ab36138b45c7/html5/thumbnails/214.jpg)
Thank you!
Any Questions?