Transcript Document
XP
XSLT II
Robin Burke
ECT 360
1
Outline
Conditionals
Numbering
Functions and operators
Variables and parameters
Named and recursive templates
2
XP
Conditional nodes
XSLT
supports two kinds of conditional
elements:
<xsl:if>
<xsl:choose>
If
is only if-then (no else)
Choose is more general
3
XP
Example
if
choose
4
XP
XP
Comparison operators
5
Predicates
XPath
expressions
test for a condition
result = set of nodes that fulfill that
condition
6
XP
Example
7
from last week
XP
Numbering
XP
Number nodes using:
<xsl:number>
position()
Using position():
Nodes are numbered by position in
result document
Can be used in conditional statements
8
Number element
XP
Nodes are numbered according to
position in source document
Attributes:
value=expression: any XPath
expression that evaluates to a number
(i.e. position())
count=pattern: specifies which nodes
to count
level=type: tree level for nodes to
count; can be any, single, or multiple
9
USING <XSL:NUMBER>
Attributes:
from=pattern: pattern indicates where
numbering should restart
format=pattern: pattern indicates
number format
grouping-size, grouping-separator:
indicate how digits are grouped and
separator character
10
XP
Example
11
numbering
XP
XPath numerical functions
12
XP
XPath string functions
13
XP
XPath operators
14
XP
Example
15
Calculating the average
XP
Number format
XPath function format-number
Syntax: format-number(value, format)
Example: format-number(56823.847,
'#,##0.00') displays 56,823.85
16
XP
Number format syntax
17
XP
Decimal format
XSL element for defining number
formats
Named decimal format passed as
argument to format-number
18
XP
Variables
Not variable!
User-defined name that stores a
particular value or object
Types:
number
text string
node set
boolean
result tree fragment
19
XP
Using variables
Syntax: <xsl:variable name=“name”
select=“value”/>
Example: <xsl:variable name=”Months”
select=”12” />
Names are case-sensitive
Value only set once upon declaration
Enclose text strings in single-quotes
20
XP
Using variables
Value can be XPath expression
Value can be XML fragment
Syntax:
<xsl:variable name=”Logo”>
<img src=”logo.gif” width=”300”
height=”100” />
</xsl:variable>
21
XP
Variable reference
Syntax: $variable-name
Example: $Months
Referencing tree fragments:
Do not use $variable-name
Use <xsl:copy-of> to reference value
22
XP
COPYING
23
XP
Global variables
Can be referenced from anywhere
within the style sheet
Must be declared at the top level of
the style sheet, as a direct child of the
<xsl:stylesheet> element
Must have a unique variable name
Evaluated only once when stylesheet
is invoked
24
XP
Local variables
Referenced only within template
Can share name with other local or
global variable
Reevaluated when template is used
25
XP
Examples
average
numbering
26
XP
Parameters
Similar to variables, but:
Value can be changed after it is
declared
Can be set outside of scope
Syntax: <xsl:param name=“name”
select=“value”/>
Example: <xsl:param name=”Filter”
select=”'C103'” />
27
To reference: $param-name
XP
External parameters
Depends on XSLT processor
Some work by appending parameter
value to url
Command line processors allow
external parameter setting:
MSXML
Saxon
28
XP
Template parameters
Local in scope
Created inside <xsl:template>
element
Used to pass parameters to template
29
XP
Idea
Called template
contains param definitions
Calling template
place <xsl:with-param> element in
<xsl:apply-templates> element
or <xsl:call-template> element
Syntax: <xsl:with-param name=“name”
select=“value”/>
30
No error if calling param name does not
match template param name
XP
Named template
XP
Template not associated with node set
Collection of commands that are
accessed from other templates in the
style sheet
Syntax:
<xsl:template name="name">
XSLT elements
</xsl:template>
31
Calling named templates
32
Syntax:
<xsl:call-template name=”name”>
<xsl:with-param />
<xsl:with-param />
...
</xsl:call-template>
XP
Example
33
XP
Functional programming
Functional programming language:
Relies on the evaluation of functions
and expressions, not sequential
execution of commands
Different from C family of languages
• LISP, Scheme, ML
34
XP
Templates as functions
A template supplies a result fragment
incorporated into the final document
think of this as substitution
function call replaced by result
35
XP
Iteration
How to handle iteration with
templates?
stars for ratings
Possibilities
convert numbers into node sets
• weird since node sets are supposed to
come from the document
36
recursive templates
XP
Recursion
Recursion
base case
• when do I stop?
recursive case
• how do I bite off one piece
• call template again with the rest
37
XP
Example
Template: star(rating)
desired output: # stars = # in rating
Base case:
rating = 0
output: nothing
Recursive case
rating > 0
output: * plus result of star (rating-1)
38
XP
Example, cont'd
star(3)
replaced by * star(2)
replaced by ** star(1)
replaced by *** star(0)
***
39
XP
Pseudocode
stars (n)
if n = 0 return ''
else
• return '*' + stars(n-1)
40
XP
Recursive pattern
XP
Syntax with <xsl:if>:
<xsl:template name=”template_name”>
<xsl:param name=”param_name” select=”default_value” />
...
<xsl:if test=”stopping_condition”>
...
<xsl:call-template name=”template_name”>
<xsl:with-param name=”param_name” select=”new_value”
/>
</xsl:call-template>
...
</xsl:if>
</xsl:template>
41
Example
42
XP
Another example
"best rated" jeep supplier
Finding maximum
43
built into XSLT 2.0
XP
Recursive statement?
44
XP
What about the name?
45
XP
Homework #5
Case 1 from Chapter 7
Plus doing it "correctly" with CSS
46
XP