Synopses & Reviews
Forget those funky robot toys that were all the rage in the '80s, XSLT (Extensible Stylesheet Transformations) is the ultimate transformer. This powerful language is expert at transforming XML documents into PDF files, HTML documents, JPEG files--virtually anything your heart desires. As useful as XSLT is, though, most people have a difficult time learning its many peculiarities. And now Version 2.0, while elegant and powerful, has only added to the confusion.
XSLT Cookbook, Second Edition wants to set the record straight. It helps you sharpen your programming skills and overall understanding of XSLT through a collection of detailed recipes. Each recipe breaks down a specific problem into manageable chunks, giving you an easy-to-grasp roadmap for integrating XSLT with your data and applications. No other XSLT book around employs this practical problem-solution-discussion format.
In addition to offering code recipes for solving everyday problems with XSLT 1.0, this new edition shows you how to leverage the improvements found in XSLT 2.0, such as how to simplify the string manipulation and date/time conversion processes. The book also covers XPath 2.0, a critical companion standard, as well as topics ranging from basic transformations to complex sorting and linking. It even explores extension functions on a variety of different XSLT processors and shows ways to combine multiple documents using XSLT. Code examples add a real-world dimension to each technique.
Whether you're just starting out in XSLT or looking for advanced techniques, you'll find the level of information you need in XSLT Cookbook, Second Edition.
Synopsis
There's great anticipation surrounding the release of XSLT 2.0, the new version of the language that's critical for converting XML documents into other formats, such as HTML code or a PDF file. Unfortunately, version 2.0's constant delays and massive complexity has caused Microsoft, for one, to shelve plans for using XSLT 2.0 in upcoming products. So, while developers will continue to rely on the XSLT 1.0 standard, they'll also want to explore the capabilities of XSLT 2.0 during what is likely to be a long transition period.
To help bridge the version gap, the new edition of XSLT Cookbook not only offers code recipes for solving everyday problems with XSLT 1.0, but also shows developers how to take advantage of new features in XSLT 2.0. More than just a collection of cut-and-paste code, this practical book enables developers to sharpen their programming skills and their understanding of XSLT through the detailed explanations provided with each recipe. Since it's often difficult to find just the right solution in XSLT, the problem-solution-discussion approach is especially applicable.
About the Author
Sal Mangano has been developing software since the days Borland Turbo C and has worked with an eclectic mix of programming languages and technologies. Sal worked on many mission-critical applications, especially in the area of financial-trading applications. In his day job, he works mostly with mainstream languages like C++ and Java so he chooses to play with more interesting technology whenever he gets a chance.
Sal's two books (XSLT Cookbook and Math Mathematica Cookbook) may seem to be an odd pair of technologies for a single author but there is a common theme that reflects his view at what makes a language powerful. Both Mathematica and XSLT rest on the idea of pattern matching and transformation. They may use these patterns in different ways and transformations to achieve different ends but they are both good at what they do and interesting to program in for a common reason. Sal's passion for these languages and ideas comes through in both these cookbooks. He also likes to push technologies as far as they can go and into every nook and cranny of application. This is reflected in the wide mix of recipes he assembled for these books.
Sal has a Master's degree in Computer Science from Polytechnic University.
Table of Contents
Preface; Structure of This Book; Conventions Used in This Book; Using Code Examples; Safari Enabled; How to Contact Us; Acknowledgments; Chapter 1: XPath; 1.1 Introduction; 1.1 Effectively Using Axes; 1.2 Filtering Nodes; 1.3 Working with Sequences; 1.4 Shrinking Conditional Code with If Expressions; 1.5 Eliminating Recursion with for Expressions; 1.6 Taming Complex Logic Using Quantifiers; 1.7 Using Set Operations; 1.8 Using Node Comparisons; 1.9 Coping with XPath 2.0's Extended Type System; 1.10 Exploiting XPath 2.0's Extended Type System; Chapter 2: Strings; 2.1 Introduction; 2.1 Testing If a String Ends with Another String; 2.2 Finding the Position of a Substring; 2.3 Removing Specific Characters from a String; 2.4 Finding Substrings from the End of a String; 2.5 Duplicating a String N Times; 2.6 Reversing a String; 2.7 Replacing Text; 2.8 Converting Case; 2.9 Tokenizing a String; 2.10 Making Do Without Regular Expressions; 2.11 Exploiting Regular Expressions; 2.12 Using the EXSLT String Extensions; Chapter 3: Numbers and Math; 3.1 Introduction; 3.1 Formatting Numbers; 3.2 Rounding Numbers to a Specified Precision; 3.3 Converting from Roman Numerals to Numbers; 3.4 Converting from One Base to Another; 3.5 Implementing Common Math Functions; 3.6 Computing Sums and Products; 3.7 Finding Minimums and Maximums; 3.8 Computing Statistical Functions; 3.9 Computing Combinatorial Functions; 3.10 Testing Bits; Chapter 4: Dates and Times; 4.1 Introduction; 4.1 Calculating the Day of the Week; 4.2 Determining the Last Day of the Month; 4.3 Getting Names for Days and Months; 4.4 Calculating Julian and Absolute Day Numbers from a Specified Date; 4.5 Calculating the Week Number for aSpecified Date; 4.6 Working with the Julian Calendar; 4.7 Working with the ISO Calendar; 4.8 Working with the Islamic Calendar; 4.9 Working with the Hebrew Calendar; 4.10 Formatting Dates and Times; 4.11 Determining Secular and Religious Holidays; Chapter 5: Selecting and Traversing; 5.1 Introduction; 5.1 Ignoring Duplicate Elements; 5.2 Selecting All but a Specific Element; 5.3 Selecting Nodes by Context; 5.4 Performing a Preorder Traversal; 5.5 Performing a Postorder Traversal; 5.6 Performing an In-Order Traversal; 5.7 Performing a Level-Order Traversal; 5.8 Processing Nodes by Position; Chapter 6: Exploiting XSLT 2.0; 6.1 Introduction; 6.1 Convert Simple Named Templates to XSLT Functions; 6.2 Prefer for-each-group over Muenchian Method of Grouping; 6.3 Modularizing and Modes; 6.4 Using Types for Safety and Precision; 6.5 Avoiding 1.0 to 2.0 Porting Pitfalls; 6.6 Emulating Object-Oriented Reuse and Design Patterns; 6.7 Processing Unstructured Text with Regular Expressions; 6.8 Solving Difficult Serialization Problems with Character Maps; 6.9 Outputting Multiple Documents; 6.10 Handling String Literals Containing Quote Characters; 6.11 Understanding the New Capabilities of Old XSLT 1.0 Features; Chapter 7: XML to Text; 7.1 Introduction; 7.1 Dealing with Whitespace; 7.2 Exporting XML to Delimited Data; 7.3 Creating a Columnar Report; 7.4 Displaying a Hierarchy; 7.5 Numbering Textual Output; 7.6 Wrapping Text to a Specified Width and Alignment; Chapter 8: XML to XML; 8.1 Introduction; 8.1 Converting Attributes to Elements; 8.2 Converting Elements to Attributes; 8.3 Renaming Elements or Attributes; 8.4 Merging Documents with Identical Schema; 8.5 Merging Documents with Unlike Schema; 8.6 Splitting Documents; 8.7 Flattening an XML Hierarchy; 8.8 Deepening an XML Hierarchy; 8.9 Reorganizing an XML Hierarchy; Chapter 9: Querying XML; 9.1 Introduction; 9.1 Performing Set Operations on Node Sets; 9.2 Performing Set Operations on Node Sets Using Value Semantics; 9.3 Determining Set Equality by Value; 9.4 Performing Structure-Preserving Queries; 9.5 Joins; 9.6 Implementing the W3C XML Query-UseCases in XSLT; Chapter 10: XML to HTML; 10.1 Introduction; 10.1 Using XSLT as a Styling Language; 10.2 Creating Hyperlinked Documents; 10.3 Creating HTML Tables; 10.4 Creating Frames; 10.5 Creating Data-Driven Stylesheets; 10.6 Creating a Self-Contained HTML Transformation; 10.7 Populating a Form; Chapter 11: XML to SVG; 11.1 Introduction; 11.1 Transforming an Existing Boilerplate SVG; 11.2 Creating Reusable SVG Generation Utilities for Graphs and Charts; 11.3 Creating a Tree Diagram; 11.4 Creating Interactive SVG-Enabled Web Pages; Chapter 12: Code Generation; 12.1 Introduction; 12.1 Generating Constant Definitions; 12.2 Generating Switching Code; 12.3 Generating Message-Handling Stub Code; 12.4 Generating Data Wrappers; 12.5 Generating Pretty Printers; 12.6 Generating a Test Data-Entry Web Client; 12.7 Generating Test-Entry Web CGI; 12.8 Generating Code from UML Models via XMI; 12.9 Generating XSLT from XSLT; Chapter 13: Vertical XSLT Application Recipes; 13.1 Introduction; 13.1 Converting Visio VDX Documents to SVG; 13.2 Working with Excel XML Spreadsheets; 13.3 Generating XTM Topic Maps from UML Modelsvia XMI; 13.4 Generating Web Sites from XTM Topic Maps; 13.5 Serving SOAP Documentation from WSDL; Chapter 14: Extending and Embedding XSLT; 14.1 Introduction; 14.1 Saxon Extension Functions; 14.2 Saxon Extension Elements; 14.3 Xalan-Java 2 Extension Functions; 14.4 Java Extension Function Using the Class Format Namespace; 14.5 Java Extension Function Using the Package Format Namespace; 14.6 Java Extension Function Using the Java Format Namespace; 14.7 Scripting Extension Function Using Inline Script Code; 14.8 Xalan-Java 2 Extension Elements; 14.9 Java Extension Element; 14.10 Scripting Extension Elements; 14.11 MSXML Extension Functions; 14.12 Using Saxon's and Xalan's Native Extensions; 14.13 Extending XSLT with JavaScript; 14.14 Adding Extension Functions Using Java; 14.15 Adding Extension Elements Using Java; 14.16 Using XSLT from Perl; 14.17 Using XSLT from Java; Chapter 15: Testing and Debugging; 15.1 Introduction; 15.1 Using xsl:message Effectively; 15.2 Tracing the Flow of Your Stylesheet Through Its Input Document; 15.3 Automating the Insertion of Debug Output; 15.4 Including Embedded Unit Test Data in Utility Stylesheets; 15.5 Structuring Unit Tests; 15.6 Testing Boundary and Error Conditions; Chapter 16: Generic and Functional Programming; 16.1 Introduction; 16.1 Creating Polymorphic XSLT; 16.2 Creating Generic Element Aggregation Functions; 16.3 Creating Generic Bounded Aggregation Functions; 16.4 Creating Generic Mapping Functions; 16.5 Creating Generic Node-Set Generators; Colophon;