1 / 54

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)

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 • Format • elementName[condition]

  7. Example • from last week

  8. Numbering • Issues • what is counted? • what is the format of the numbering? • how are numbers at different places in the tree related?

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

  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. Number element • Nodes are numbered according to position in source document • More flexibility

  12. Example • numbering with position • numbering with number element

  13. Number element • Attributes:value=expression: any XPath expression that evaluates to a number (i.e. position())count=pattern: specifies which nodes to countlevel=type: tree level for nodes to count; can be any, single, or multiple

  14. Numbering, cont’d • count attribute • indicates what is being counted • default = count elements of the same name • otherwise = specify an XPath pattern • all matching elements included

  15. Numbering relationships • how does the number of one element depend on other elements? • Possibilities • only depends on immediate siblings • single • depends on “parent” • multiple • depends on “cousins” • any

  16. Formatting • format • type • 1, a, A, i, I • other punctuation

  17. Example • table of contents

  18. Internal computations • Often performed using XPath • sort of like SQL • Can perform calculations of nodes selected by an XPath expression • XPath functions

  19. XPath numerical functions

  20. XPath string functions

  21. XPath operators

  22. Note • XSLT 2.0 has a lot more functions • dozens

  23. Example • Calculating the average • Problem • redundant calculation

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

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

  26. Using variables, cont'd • 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>

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

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

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

  30. Examples • average with variables

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

  32. Number format syntax

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

  34. Example • average with format

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

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

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

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

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

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

  41. Example • average with named template

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

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

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

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

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

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

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

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

  50. Example • ratings with stars

More Related