Read XSLT 2.0 and XPath 2.0 Programmer's Reference, 4th Edition Online
Authors: Michael Kay
Errata
We make every effort to ensure that there are no errors in the text or in the code. However, no one is perfect, and mistakes do occur. If you find an error in one of our books, such as a spelling mistake or faulty piece of code, we would be very grateful for your feedback. By sending in errata you may save another reader hours of frustration and at the same time you will be helping us provide even higher-quality information.
To find the errata page for this book, go to
http://www.wrox.com
and locate the title using the Search box or one of the title lists. Then, on the book details page, click the Book Errata link. On this page you can view all errata that have been submitted for this book and posted by Wrox editors. A complete book list, including links to each book's errata, is also available at
www.wrox.com/misc-pages/booklist.shtml
.
If you don't spot “your” error on the Book Errata page, go to
www.wrox.com/contact/techsupport.shtml
and complete the form there to send us the error you have found. We'll check the information and, if appropriate, post a message to the book's errata page and fix the problem in subsequent editions of the book.
p2p.wrox.com
For author and peer discussion, join the P2P forums at
p2p.wrox.com
. The forums are a Web-based system for you to post messages relating to Wrox books and related technologies and interact with other readers and technology users. The forums offer a subscription feature to e-mail you topics of interest of your choosing when new posts are made to the forums. Wrox authors, editors, other industry experts, and your fellow readers are present on these forums.
At
http://p2p.wrox.com
you will find a number of different forums that will help you not only as you read this book but also as you develop your own applications. To join the forums, just follow these steps:
1.
Go to
p2p.wrox.com
and click the Register link.
2.
Read the terms of use and click Agree.
3.
Complete the required information to join as well as any optional information you wish to provide, and click Submit.
4.
You will receive an e-mail with information describing how to verify your account and complete the joining process.
You can read messages in the forums without joining P2P but in order to post your own messages, you must join.
Once you join, you can post new messages and respond to messages other users post. You can read messages at any time on the Web. If you would like to have new messages from a particular forum e-mailed to you, click the Subscribe to this Forum icon by the forum name in the forum listing.
Here are some tips for writing a question if you want a good answer:
1.
Choose your subject line carefully. Not just “XSLT question”.
2.
Don't use text shorthand. Not everyone has English as their first language, but if you take care over writing your question, it's much more likely that someone will take care over answering it.
3.
Show a complete source document, a complete example of your required output, and if you want to know why your code doesn't work, your complete code—but only after paring the problem down to its essentials. Don't ask people to debug code that they can't see.
4.
If you tried something and it didn't work, say exactly what you tried and exactly how it failed (including details of what products you are using).
For more information about how to use the Wrox P2P, be sure to read the P2P FAQs for answers to questions about how the forum software works as well as many common questions specific to P2P and Wrox books. To read the FAQs, click the FAQ link on any P2P page.
List of Examples
This list includes all the worked examples in the book: that is, the examples consisting of entire stylesheets, for which working code can be downloaded from
http://www.wrox.com/
. It does not include the many examples that are provided as incomplete snippets.
The purpose of this list is to help you out when you know that you've seen an example somewhere that is relevant to your current problem, but you can't remember where you saw it.
Chapter 1
Description | Page |
A Hello World Stylesheet This stylesheet creates an HTML containing a greeting (such as “Hello, World!”) read from the source XML document. | 11 |
Tabulating Word Frequencies Given any XML document, this stylesheet produces a list of the words that appear in its text, giving the number of times each word appears, together with its frequency. This illustrates features in XSLT 2.0 for analyzing text using regular expressions, and for grouping based on common values. | 19 |
Displaying a Poem This stylesheet shows how to use template rules to render the text of a poem in HTML. | 35 |
Chapter 2
Description | Page |
An XML Tree This example shows how an XML document is represented as a tree in the data model. | 46 |
Push Processing This stylesheet shows the use of template rules to display a list of books in HTML, using one template rule for each different kind of node. | 74 |
Controlling the Sequence of Processing This example shows a refinement of the previous stylesheet in which the select attribute of | 77 |
Selecting Nodes Explicitly This shows a further refinement of the book list stylesheet in which some aspects of the output are generated using | 77 |
Chapter 3
Description | Page |
Using | 91 |
Using | 95 |
Embedded Stylesheets This example shows the use of a stylesheet embedded within the source document that it is designed to display. | 102 |
A Simplified Stylesheet This is an example of a simplified stylesheet module, that is, a stylesheet whose outermost element is a literal result element rather than an | 125 |
Using An Extension Instruction This stylesheet uses Saxon's | 139 |
Chapter 4
Description | Page |
Validating the Source Document In this example a stylesheet takes advantage of the fact that the source document can be validated against a schema before the transformation starts. | 67 |
Validating the Result Document This stylesheet invokes validation of the result document using the | 71 |
Chapter 6
Description | Page |
Using Modes The example uses a mode to display a list of characters appearing in a play. | 247 |
Checking for Cycles in a Graph This example provides a generic procedure to look for cycles in a graph, and then applies this procedure to a data file to see if the ID/IDREF links are cyclic. It illustrates the use of | 251 |
Generating an Attribute Conditionally This example shows the use of | 263 |
Deciding the Attribute Name at Runtime This example shows the use of | 264 |
Using an Attribute Set for Numbering This stylesheet shows an unusual way of using attribute sets, to illustrate that the attributes generated by an attribute set do not need to have fixed values. | 270 |
Using Recursion to Process a Sequence of Nodes This example illustrates how to use a recursive named template to process a sequence of nodes. It uses this technique to find the longest speech in a play. | 275 |
Using Recursion to Process a Sequence of Strings This example uses a recursive named template to process a sequence of strings, obtained by splitting a line of text into its constituent words. It uses this technique to find phrases of the form “A and B”, where A and B are both the names of characters in a play. | 278 |
Using | 294 |
Converting Attributes to Child Elements This example illustrates how | 315 |
Showing the Ancestors of a Node This example stylesheet can be applied to any XML document. For each element it processes all its ancestor elements, in reverse document order (that is, starting with the parent node and ending with the document element), and outputs their names to a comment that shows the position of the current node. | 325 |
Single-Level Grouping by Value This stylesheet uses | 331 |
Multilevel Grouping by Value This example groups employees by department, and groups the departments by location. | 333 |
Grouping Consecutive Elements by Name This example shows how the group-adjacent attribute of | 336 |
Handling Repeating Groups of Adjacent Elements This takes the previous example and makes the problem more difficult, by removing another layer of markup from the source document, so that it is necessary to infer multiple levels of hierarchic structure from the pattern of leaf elements in the tree. | 338 |
Handling Flat XHTML Documents This example shows how to use the group-starting-with attribute of | 340 |
Calculating Annual Leave This is a simple illustration of the use of stylesheet functions to structure a computation in a stylesheet. It uses two user-defined functions, a function to calculate the annual leave entitlement of an employee, which in turn calls a function to calculate the employee's length of service given a starting and ending date. | 347 |
Looking for Cycles Among Attribute Sets This example illustrates the use of recursive stylesheet functions to analyze a graph structure. Specifically, it analyzes an XSLT stylesheet as its source document, to determine whether there are any cyclic dependencies among the attribute set definitions in the stylesheet. | 352 |
Formatting a List of Names This example shows the use of | 356 |
Precedence of Variables This example shows how an importing stylesheet module can declare global variables with the same names as variables within the imported module, and how the variables in the importing module take precedence. | 364 |
Precedence of Template Rules This example shows how an importing stylesheet module can declare template rules that override template rules within the imported module. It also shows the use of | 365 |
Using | 375 |
Multivalued non-Unique Keys This example shows the use of an | 381 |
Generating a Stylesheet using | 398 |
Identifying Location of Text within a Document This example is adapted from the stylesheet used to produce the errata for the XSLT and XPath specifications. It searches the published document for a given phrase, and then identifies all the places where the phrase occurs, using | 413 |
Numbering the Lines of a Poem This stylesheet uses | 417 |
Using | 432 |
Tunnel Parameters This example shows how tunnel parameters can be useful when customizing an existing stylesheet, for reducing the number of rules in the existing stylesheet that need to be modified. The specific example shows how to produce a modified rendition of a Shakespeare play in which the lines for each actor are highlighted. | 433 |
Creating Multiple Output Files This stylesheet uses the | 451 |
Sorting on the Result of a Calculation This example uses | 463 |
Template Rules This is an illustration of the classic use of template rules to control the rendition of narrative text, in this case, reviews of classical concerts. | 488 |
Using Modes This stylesheet modifies the previous example showing how modes can be used to process the same source data in more than one way, using different template rules. It illustrates this by including at the end of each concert review a summary of the works performed in the concert. | 490 |
Using a Variable for Context-Sensitive Values This stylesheet (used to publish a series of opera performances) shows how a variable can be used to hold on to information that depends on the context, for use when the context has changed. | 508 |
A Multiphase Transformation An example of a stylesheet that uses variables to capture the result of one phase of processing, so that further processing can be carried out before delivering the final result. In this case the first phase calculates the results of a soccer tournament, and the second phase displays these results as HTML. | 511 |
Chapter 12
Description | Page |
Using the key() Pattern to Format a Specific Node This stylesheet shows how a match pattern for a template rule can use the key() function to apply distinctive formatting to one selected node in the source document. | 706 |