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