| Preface | p. xi |
| Getting Started | p. 1 |
| The Design of XSLT | p. 1 |
| XML Basics | p. 4 |
| Installing XSLT Processors | p. 20 |
| Summary | p. 24 |
| The Obligatory Hello World Example | p. 25 |
| Goals of This Chapter | p. 25 |
| Transforming Hello World | p. 25 |
| How a Stylesheet Is Processed | p. 27 |
| Stylesheet Structure | p. 30 |
| Sample Gallery | p. 36 |
| Summary | p. 44 |
| XPath: A Syntax for Describing Needles and Haystacks | p. 45 |
| The XPath Data Model | p. 46 |
| Location Paths | p. 55 |
| Attribute Value Templates | p. 66 |
| Datatypes | p. 67 |
| XPath Operators | p. 71 |
| [2.0] Comments in XPath Expressions | p. 102 |
| [2.0] Types of XSLT 2.0 Processors | p. 104 |
| The XPath View of an XML Document | p. 104 |
| Summary | p. 112 |
| Creating Output | p. 113 |
| Goals of This Chapter | p. 113 |
| Generating Text | p. 113 |
| Numbering Things | p. 118 |
| Formatting Decimal Numbers | p. 127 |
| [2.0] Formatting Dates and Times | p. 130 |
| Using [left angle bracket]xsl:copy[right angle bracket] and [left angle bracket]xsl:copy-of[right angle bracket] | p. 132 |
| Dealing with Whitespace | p. 139 |
| Summary | p. 144 |
| Branching and Control Elements | p. 145 |
| Goals of This Chapter | p. 145 |
| Branching Elements of XSLT | p. 145 |
| Invoking Templates by Name | p. 151 |
| Parameters | p. 152 |
| Variables | p. 167 |
| Using Recursion to Do Most Anything | p. 169 |
| A Stylesheet That Emulates a for Loop | p. 174 |
| Summary | p. 179 |
| Creating Links and Cross-References | p. 181 |
| Using the XML ID, IDREF, and IDREFS Datatypes | p. 181 |
| XSLT's Key Facility | p. 194 |
| Generating Links in Unstructured Documents | p. 198 |
| Summary | p. 204 |
| Sorting and Grouping Elements | p. 205 |
| Sorting Data with [left angle bracket]xsl:sort[right angle bracket] | p. 205 |
| [2.0] The [left angle bracket]xsl:perform-sort[right angle bracket] Element | p. 215 |
| Grouping Nodes | p. 219 |
| [2.0] New Grouping Syntax in XSLT 2.0 | p. 228 |
| Summary | p. 243 |
| Combining Documents | p. 245 |
| The document() Function | p. 245 |
| The document() Function and Sorting | p. 254 |
| Implementing Lookup Tables | p. 254 |
| Grouping Across Multiple Documents | p. 257 |
| [2.0] Using XSLT 2.0 to Simplify Things | p. 260 |
| [2.0] The doc() and doc-available() Functions | p. 269 |
| [2.0] The collection() Function | p. 271 |
| [2.0] The unparsed-text() and unparsed-text-available() Functions | p. 272 |
| Summary | p. 275 |
| Extending XSLT | p. 277 |
| The XSLT Extension Mechanism | p. 277 |
| [2.0] Creating New Functions with [left angle bracket]xsl:function[right angle bracket] | p. 279 |
| Example: Generating Multiple Output Files | p. 281 |
| Creating Custom Collations | p. 287 |
| Generating Hidden Word Graphics | p. 293 |
| Example: Generating an SVG Pie Chart | p. 303 |
| Writing Extensions in Other Languages | p. 326 |
| Using Extension Functions from the EXSLT Library | p. 330 |
| Accessing a Database with an Extension Element | p. 333 |
| Creating a Photo Album with an Extension Element | p. 339 |
| Summary | p. 360 |
| XSLT Reference | p. 361 |
| XPath Reference | p. 545 |
| XSLT, XPath, and XQuery Function Reference | p. 563 |
| XML Schema Overview | p. 871 |
| [2.0] Regular Expressions | p. 897 |
| XSLT Formatting Codes | p. 919 |
| XSLT 2.0 Migration Guide | p. 925 |
| Glossary | p. 933 |
| Index | p. 943 |
| Table of Contents provided by Ingram. All Rights Reserved. |