C:\fakepath\xsl final
description
Transcript of C:\fakepath\xsl final
EXtensible Stylesheet Language
Apr 8, 2023
What is XSL? XSL stands for Extensible Stylesheet Language CSS was designed for styling HTML pages, and can be used to
style XML pages XSL was designed specifically to style XML pages, and is
much more sophisticated than CSS XSL consists of three languages:
XSLT (XSL Transformations) is a language used to transform XML documents into other kinds of documents (most commonly HTML, so they can be displayed)
XPath is a language to select parts of an XML document to transform with XSLT
XSL-FO (XSL Formatting Objects) is a replacement for CSS There are no current implementations of XSL-FO, and we won’t cover it
2
How does it work?
The XML source document is parsed into an XML source tree
You use XPath to define templates that match parts of the source tree
You use XSLT to transform the matched part and put the transformed information into the result tree
The result tree is output as a result document Parts of the source document that are not matched by a
template are typically copied unchanged
3
Simple XPath
Here’s a simple XML document: <?xml version="1.0"?>
<library> <book> <title>XML</title> <author>Gregory Brill</author> </book> <book> <title>Java and XML</title> <author>Brett McLaughlin</author> </book></library >
XPath expressions look a lot like paths in a computer file system
/ means the document itself (but no specific elements)
/library selects the root element
/library/book selects every book element
//author selects every author element, wherever it occurs
4
Simple XSLT
<xsl:for-each select="//book"> loops through every book element, everywhere in the document
<xsl:value-of select="title"/> chooses the content of the title element at the current location
<xsl:for-each select="//book"> <xsl:value-of select="title"/></xsl:for-each>chooses the content of the title element for each book in the XML document
5
Using XSL to create HTML
Our goal is to turn this: <?xml version="1.0"?>
<library> <book> <title>XML</title> <author>Gregory Brill</author> </book> <book> <title>Java and XML</title> <author>Brett McLaughlin</author> </book></library >
Into HTML that displays something like this:
Book Titles: • XML • Java and XMLBook Authors: • Gregory Brill • Brett McLaughlin
Note that we’ve grouped titles and authors separately
6
What we need to do
We need to save our XML into a file (let’s call it books.xml)
We need to create a file (say, books.xsl) that describes how to select elements from books.xml and embed them into an HTML page We do this by intermixing the HTML and the XSL in the
books.xsl file We need to add a line to our books.xml file to tell it to
refer to books.xsl for formatting information
7
books.xml, revised
<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="books.xsl"?><library> <book> <title>XML</title> <author>Gregory Brill</author> </book> <book> <title>Java and XML</title> <author>Brett McLaughlin</author> </book></library >
8
This tells you where to find the XSL file
Desired HTML
<html> <head> <title>Book Titles and Authors</title> </head> <body> <h2>Book titles:</h2> <ul> <li>XML</li> <li>Java and XML</li> </ul> <h2>Book authors:</h2> <ul> <li>Gregory Brill</li> <li>Brett McLaughlin</li> </ul> </body></html>
9
Blue text is data extracted from the XML document
Brown text is our HTML template
We don’t necessarily know how much data
we will have
XSL outline
<?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> ... </html>
</xsl:template> </xsl:stylesheet>
10
XSL Architecture
11
XMLSource
XSLStylesheet
HTMLOutput
XSLProcessor
XSLProcessor
XSL Elements
<xsl:Value-of>
<xsl:if> <xsl:choose> <xsl:copy> <xsl:comment> <xsl:copy-of> <xsl:element> <xsl:apply-import> <xsl:fallback>
<xsl:attribute> <xsl:call-tempalate> <xsl:for-each> <xsl:sort> <xsl:message> <xsl:number> <xsl:text> <xsl:param> <xsl:variable>
12
<xsl:value-of> Element
The XSL element <xsl:value-of> can be used to extract the value of an element that is selected from the source XML document
The extracted value is added to the output stream The selected element is located by an XPath
expression that appears as the value of the select attribute
<xsl:value-of select=“xpath-expression”/><xsl:value-of select=“xpath-expression”/>
13
Output Of <xsl:value-of>
14
Selected values
15
<xsl:for-each> Element
The <xsl:for-each> element loops over all the nodes in the nodelist of the XPath expression that appears as the value of the select attribute
The value of each node can be extracted by an <xsl:value-of> element
<xsl:for-each select=“xpath-expression”/><xsl:for-each select=“xpath-expression”/>
Output of <xsl:for-each>
16
All the values are selected
17
<xsl:sort> Element
The <xsl:sort> element is used to sort the list of nodes that are looped over by the <xsl:for-each> element
Thus, the <xsl:sort> must appear inside the <xsl:for-each> element
The looping is done in sorted order
<xsl:sort select=“xpath-expression”/><xsl:sort select=“xpath-expression”/>
18
<xsl:if> Element
The <xsl:if> element is used for conditional processing
The condition appears as the value of the test attribute, for example:
<xsl:if test="price > 10"> some output ...</xsl:if>
The elements inside the <xsl:if> element are processed if the condition is true
19
<xsl:choose> Element
The <xsl:choose> element is used in conjunction with <xsl:when> and <xsl:otherwise> to express test with multiple conditions
There can be many <xsl:when> inside an <xsl:choose> element, but there should be a single <xsl:otherwise> inside an <xsl:choose> element
20
Using <xsl:choose>
To insert a conditional choose against the content of the XML file, simply add the <xsl:choose>, <xsl:when>, and <xsl:otherwise> elements to your XSL document like this:<xsl:choose> <xsl:when test="price > 10"> ... some code ... </xsl:when> <xsl:otherwise> ... some code .... </xsl:otherwise></xsl:choose>
How to use it
In a modern browser, such as Netscape 6, Internet Explorer 6, or Mozilla 1.0, you can just open the XML file Older browsers will ignore the XSL and just show you
the XML contents as continuous text You can use a program such as Xalan, MSXML,
or Saxon to create the HTML as a file This can be done on the server side, so that all the client
side browser sees is plain HTML The server can create the HTML dynamically from the
information currently in XML
21
XSL Disadvantages
22
Confusing syntax and semantics Like Prolog+C+XML It's really a programming language, but using markup language
Hard to debug XSL Trace helps a little
Don't have full power of, say, Java inside templates No database access, hashtables, methods, objects, etc.
Still need separate .xsl file for each client device