Specifying XSLT Patterns and Expressions

In a stylesheet's xsl:template, xsl:apply-templates, xsl:for-each, and xsl:value-of instructions, you specify patterns or expressions as the values for the match or select attributes. These patterns are XPath expressions. You specify patterns or expressions to

  • Define which nodes a template rule matches.
  • Select lists of source nodes to process.
  • Extract source node contents to generate result nodes.

Depending on the context, an XSLT pattern or expression can mean one of the following:

  • Does this template match the current node?
  • Given the current node, select all matching source nodes.
  • Given the current node, select the first matching source node.
  • Given the current node, do any source nodes match?

Patterns or expressions can match or select any type of node. The XSLT processor can match a pattern to a node based on the existence of the node, the name of the node, or the value of the node. You can combine patterns and expressions with Boolean operators. For detailed information about patterns and expressions, see Chapter 9Writing XPath Expressions.

Examples of Patterns and Expressions

Following are examples of patterns and expressions you can specify in stylesheet instructions:


              xsl:template match = "book/price" 
               

            

Matches any price element that is a child of a book element.


              xsl:template match = "book//award" 
               

            

Matches any award element that is a descendant of a book element.


              xsl:template match = "book [price]" 
               

            

Matches any book element that has a child that is a price element.


              xsl:template match = "book [@price]" 
               

            

Matches any book element that has a price attribute.


              xsl:template match = "book [price=14]" 
               

            

Matches any book element that has a child that is a price element whose value is 14.


              xsl:template match = "book [@price=14]"
               

            

Matches any book element that has a price attribute whose value is 14.


              xsl:apply-templates select = "book"
               

            

Selects all book elements that are children of the current element.


              xsl:apply-templates select = "book/price"
               

            

Selects all price elements that are children of book elements that are children of the current element.


              xsl:apply-templates select = "//book"
               

            

Selects all book elements in the source document.


              xsl:apply-templates select = ".//book"
               

            

Selects all book elements that are descendants of the current element.

 
Free Stylus Studio XML Training: