1 / 46

XSLT II

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)

hackett
Download Presentation

XSLT II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XSLT II Robin Burke ECT 360

  2. Outline • Conditionals • Numbering • Functions and operators • Variables and parameters • Named and recursive templates

  3. Conditional nodes • XSLT supports two kinds of conditional elements: • <xsl:if> • <xsl:choose> • If is only if-then (no else) • Choose is more general

  4. Example • if • choose

  5. Comparison operators

  6. Predicates • XPath expressions • test for a condition • result = set of nodes that fulfill that condition

  7. Example • from last week

  8. Numbering • Number nodes using: • <xsl:number> • position() • Using position(): • Nodes are numbered by position in result document • Can be used in conditional statements

  9. 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

  10. 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

  11. Example • numbering

  12. XPath numerical functions

  13. XPath string functions

  14. XPath operators

  15. Example • Calculating the average

  16. Number format • XPath function format-number • Syntax: format-number(value, format) • Example: format-number(56823.847, '#,##0.00') displays 56,823.85

  17. Number format syntax

  18. Decimal format • XSL element for defining number formats • Named decimal format passed as argument to format-number

  19. Variables • Not variable! • User-defined name that stores a particular value or object • Types: • number • text string • node set • boolean • result tree fragment

  20. 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

  21. 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>

  22. Variable reference • Syntax: $variable-name • Example: $Months • Referencing tree fragments: • Do not use $variable-name • Use <xsl:copy-of> to reference value

  23. COPYING

  24. 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

  25. Local variables • Referenced only within template • Can share name with other local or global variable • Reevaluated when template is used

  26. Examples • average • numbering

  27. 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

  28. External parameters • Depends on XSLT processor • Some work by appending parameter value to url • Command line processors allow external parameter setting: • MSXML • Saxon

  29. Template parameters • Local in scope • Created inside <xsl:template> element • Used to pass parameters to template

  30. 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

  31. 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>

  32. Calling named templates • Syntax: <xsl:call-template name=”name”> <xsl:with-param /> <xsl:with-param /> ... </xsl:call-template>

  33. Example

  34. 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

  35. Templates as functions • A template supplies a result fragment • incorporated into the final document • think of this as substitution • function call replaced by result

  36. 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

  37. Recursion • Recursion • base case • when do I stop? • recursive case • how do I bite off one piece • call template again with the rest

  38. 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)

  39. Example, cont'd • star(3) • replaced by * star(2) • replaced by ** star(1) • replaced by *** star(0) • ***

  40. Pseudocode • stars (n) • if n = 0 return '' • else • return '*' + stars(n-1)

  41. 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>

  42. Example

  43. Another example • "best rated" jeep supplier • Finding maximum • built into XSLT 2.0

  44. Recursive statement?

  45. What about the name?

  46. Homework #5 • Case 1 from Chapter 7 • Plus doing it "correctly" with CSS

More Related