Template Design Implementation A Stylesheet That Emulates a for Loop
4.7.3 The Complete Example
Heres our complete stylesheet: ?xml version=1.0? xsl:stylesheet xmlns:xsl=http:www.w3.org1999XSLTransform version=1.0 xsl:output method=text xsl:variable name=newline xsl:text xsl:text xsl:variable xsl:template name=for-loop xsl:param name=i select=1 xsl:param name=increment select=1 xsl:param name=operator select== xsl:param name=testValue select=1 xsl:param name=iteration select=1 page 73 xsl:variable name=testPassed xsl:choose xsl:when test=starts-withoperator, = xsl:if test=i = testValue xsl:texttruexsl:text xsl:if xsl:when xsl:when test=starts-withoperator, = xsl:if test=i = testValue xsl:texttruexsl:text xsl:if xsl:when xsl:when test=starts-withoperator, = xsl:if test=i = testValue xsl:texttruexsl:text xsl:if xsl:when xsl:when test=starts-withoperator, = xsl:if test=i = testValue xsl:texttruexsl:text xsl:if xsl:when xsl:when test=starts-withoperator, xsl:if test=i testValue xsl:texttruexsl:text xsl:if xsl:when xsl:when test=starts-withoperator, xsl:if test=i testValue xsl:texttruexsl:text xsl:if xsl:when xsl:otherwise xsl:message terminate=yes xsl:textSorry, the for-loop emulator only xsl:text xsl:texthandles six operators xsl:text xsl:value-of select=newline xsl:text | | = | = | = | =. xsl:text xsl:textThe value xsl:text xsl:value-of select=operator xsl:text is not allowed.xsl:text xsl:value-of select=newline xsl:message xsl:otherwise xsl:choose xsl:variable xsl:if test=testPassed=true -- Put your logic here, whatever it might be. For the purpose -- -- of our example, well just write some text to the output stream. -- xsl:textIteration xsl:textxsl:value-of select=iteration xsl:text: i=xsl:text xsl:value-of select=ixsl:value-of select=newline -- Your logic should end here; dont change the rest of this -- -- template -- -- Now for the important part: we increment the index variable and -- -- loop. Notice that were passing the incremented value, not -- -- changing the variable itself. -- xsl:call-template name=for-loop xsl:with-param name=i select=i + increment xsl:with-param name=increment select=increment xsl:with-param name=operator select=operator xsl:with-param name=testValue select=testValue xsl:with-param name=iteration select=iteration + 1Parts
» O'Reilly-XSLT-Mastering.XML.Transformati... 2264KB Mar 29 2010 05:03:43 AM
» An XML document must be contained in a single element
» XML declarations Document Type Definitions DTDs and XML Schemas
» Well-formed versus valid documents
» Tags versus elements XML Document Rules
» Namespaces XML Document Rules
» The Extensible Stylesheet Language XSL
» Document Object Model DOM Level 1
» Document Object Model DOM Level 2
» Namespaces in XML XML Standards
» Associating stylesheets with XML documents
» Installing Xalan Getting Started
» Our Sample Document A Sample Stylesheet
» Transforming the XML Document
» Stylesheet Results Transforming Hello World
» Parsing the Stylesheet How a Stylesheet Is Processed
» Parsing the Transformee How a Stylesheet Is Processed
» Lather, Rinse, Repeat How a Stylesheet Is Processed
» The xsl:template for greeting Elements
» Built-in template rule for element and root nodes
» Built-in template rule for modes
» Built-in template rule for text and attribute nodes
» Top-Level Elements Stylesheet Structure
» Other Approaches Stylesheet Structure
» The Hello World Java Program
» Goals of This Chapter Summary
» The Root Node The XPath Data Model
» Element Nodes The XPath Data Model
» Attribute Nodes The XPath Data Model
» Text Nodes The XPath Data Model
» Comment Nodes The XPath Data Model
» Processing Instruction Nodes The XPath Data Model
» Namespace Nodes The XPath Data Model
» Simple Location Paths Location Paths
» Relative and Absolute Expressions
» Selecting attributes Selecting Things Besides Elements with Location Paths
» Selecting the text of an element
» Selecting comments, processing instructions, and namespace nodes
» Using Wildcards Location Paths
» Numbers in predicates Predicates
» Functions in predicates Predicates
» Attribute Value Templates XPath Datatypes
» Output View The XPath View of an XML Document
» The Stylesheet The XPath View of an XML Document
» Summary XPath: A Syntax for Describing Needles and Haystacks
» Converting to boolean values
» Boolean examples The xsl:if Element
» xsl:for-each example The xsl:for-each Element
» How It Works Invoking Templates by Name
» Templates à la Mode Invoking Templates by Name
» Defining a Parameter in a Template
» Microsofts XSLT tools Global Parameters
» Setting global parameters in a Java program
» Are These Things Really Variables?
» Procedural design Implementing a String Replace Function
» Recursive design Implementing a String Replace Function
» Template Design Implementation A Stylesheet That Emulates a for Loop
» The Complete Example A Stylesheet That Emulates a for Loop
» XML Input A Stylesheet That Generates a Stylesheet That Emulates a for Loop
» Template Design A Stylesheet That Generates a Stylesheet That Emulates a for Loop
» Complications A Stylesheet That Generates a Stylesheet That Emulates a for Loop
» Summary Branching and Control Elements
» The ID, IDREF, and IDREFs Datatypes
» An XML Document in Need of Links
» A Stylesheet That Uses the id Function
» Limitations of IDs Generating Links with the id Function
» Defining a key Generating Links with the key Function
» A Slightly More Complicated XML Document in Need of Links
» The key function and the IDREFS datatype
» Solution 1: Replace the IDREFS datatype
» Solution 2: Use the XPath contains function
» Solution 3: Use recursion to process the IDREFS datatype
» Solution 4: Use an extension function
» Advantages of the key Function
» An Unstructured XML Document in Need of Links
» The generate-id Function Generating Links in Unstructured Documents
» Summary Creating Links and Cross-References
» Our First Example Sorting Data with xsl:sort
» Whats the deal with that syntax?
» Attributes The Details on the xsl:sort Element
» Another Example Sorting Data with xsl:sort
» Our First Attempt Grouping Nodes
» A Brute-Force Approach Grouping with xsl:variable
» Summary Sorting and Grouping Elements
» Recursive design An Aside: Doing Math with Recursion
» Generating output to initialize a variable
» Overview Invoking the document Function
» The document Function and Sorting
» Implementing Lookup Tables More Sophisticated Techniques
» Grouping Across Multiple Documents
» Summary Combining XML Documents
» Example: Generating multiple output files
» Example: Using extension functions from multiple processors
» Example: A library of trigonometric functions
» Example: Writing extensions in other languages
» Fallback Processing Extension Elements, Extension Functions, and Fallback Processing
» Extending the Saxon Processor
» Generating JPEG Files from XML Content
» About the Toot-O-Matic Case Study: The Toot-O-Matic
» Make It Easier to Create Tutorials
» Individual Panels Tutorial Layout
» Email Panel Zip File PDF Files
» Individual Panels XML Document Design
» Stylesheets and Modes XSLT Source Code
» Initializing Global Variables XSLT Source Code
» Generating the Main Menu Panel
» Generating the Section Indexes
» Generating the Individual Panels
Show more