460 likes | 566 Vues
This outline covers essential concepts in XSLT including conditionals like <xsl:if> and <xsl:choose>, the use of <xsl:number> for numbering nodes, and the distinction between variables and parameters. Understand how to implement XPath expressions and predicates for conditional evaluations, format numbers with the format-number function, and define global and local variables for effective template design. The guide also explores named and recursive templates, providing practical examples to illustrate these concepts for better grasp and application in XML transformations.
E N D
XSLT II Robin Burke ECT 360
Outline • Conditionals • Numbering • Functions and operators • Variables and parameters • Named and recursive templates
Conditional nodes • XSLT supports two kinds of conditional elements: • <xsl:if> • <xsl:choose> • If is only if-then (no else) • Choose is more general
Example • if • choose
Predicates • XPath expressions • test for a condition • result = set of nodes that fulfill that condition
Example • from last week
Numbering • Number nodes using: • <xsl:number> • position() • Using position(): • Nodes are numbered by position in result document • Can be used in conditional statements
Number element • 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
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
Example • numbering
Example • Calculating the average
Number format • XPath function format-number • Syntax: format-number(value, format) • Example: format-number(56823.847, '#,##0.00') displays 56,823.85
Decimal format • XSL element for defining number formats • Named decimal format passed as argument to format-number
Variables • Not variable! • User-defined name that stores a particular value or object • Types: • number • text string • node set • boolean • result tree fragment
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
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>
Variable reference • Syntax: $variable-name • Example: $Months • Referencing tree fragments: • Do not use $variable-name • Use <xsl:copy-of> to reference value
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
Local variables • Referenced only within template • Can share name with other local or global variable • Reevaluated when template is used
Examples • average • numbering
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'” /> • To reference: $param-name
External parameters • Depends on XSLT processor • Some work by appending parameter value to url • Command line processors allow external parameter setting: • MSXML • Saxon
Template parameters • Local in scope • Created inside <xsl:template> element • Used to pass parameters to template
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”/> • No error if calling param name does not match template param name
Named template • 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>
Calling named templates • Syntax: <xsl:call-template name=”name”> <xsl:with-param /> <xsl:with-param /> ... </xsl:call-template>
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
Templates as functions • A template supplies a result fragment • incorporated into the final document • think of this as substitution • function call replaced by result
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 • recursive templates
Recursion • Recursion • base case • when do I stop? • recursive case • how do I bite off one piece • call template again with the rest
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)
Example, cont'd • star(3) • replaced by * star(2) • replaced by ** star(1) • replaced by *** star(0) • ***
Pseudocode • stars (n) • if n = 0 return '' • else • return '*' + stars(n-1)
Recursive pattern • 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>
Another example • "best rated" jeep supplier • Finding maximum • built into XSLT 2.0
Homework #5 • Case 1 from Chapter 7 • Plus doing it "correctly" with CSS