SlideServe
Menu
Préférences
© SlideServe · v2026

Introduction to XSLT

RexAlvis avatar
64 diapositives · 981 Views · Apr 08, 2011

Orion Ifland 2008-05-15. Introduction to XSLT. Introduction to XSLT. Agenda The X* Ecosystem (XSL, XPath, XQuery...) ‏ XML Refresh/Terminology XPath: Addresses for XML documents XSLT Basics: template and value-of XSLT Loops: apply-templates and for-each

Introduction to XSLT - slide 1
01 / 64Introduction to XSLT
1 / 17

Télécharger la présentation

Introduction to XSLT
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Orion Ifland 2008-05-15 Introduction to XSLT

  2. Introduction to XSLT • Agenda The X* Ecosystem (XSL, XPath, XQuery...)‏ XML Refresh/Terminology XPath: Addresses for XML documents XSLT Basics: template and value-of XSLT Loops: apply-templates and for-each XSLT Decisions: if and choose XSLT Variables: variable and param XSLT Extras: sort, copy-of, document… Why/When XSLT?

  3. The X* Ecosystem • XSL(T): Extensible Stylesheet Language (Transforms)‏ • Like a giant function with a domain of XML and a range of XML, HTML and Text • XSL-FO (Formatting Objects) is a related, graphics/print-oriented language • XPath: XML Path (addressing)‏ • Like a filesystem path in an XML document • Also like RegEx

  4. The X* Ecosystem • XQuery / XPath 2.0 / XSLT 2.0 • Kind of jumbled together • XQuery looks more like a mix of XSLT, SQL, and Javascript (including lots of XPath)‏ • XMLNS (XML Namespaces)‏ • Like programming language namespaces, distinguishes between elements/attributes with the same name • Used by XSLT and many other XML dialects

  5. XML Refresh/Terminology • XML Nodes • Processing instruction: <?pi ... ?> • Element: <element /> or <element></element> • Attribute: <element attribute="value" /> • Comment: <!-- comment --> • Entity: &amp; • Text node (just plain text)

  6. XML Refresh/Terminology • XML Syntax Rules • Escape < > & (turn them into entities &lt; &gt; &amp;) • Every document has exactly one root element • Attribute values are always quoted • Elements are case-sensitive (and are typically lowercase) • You don't have to put an xml processing instruction at the top of your document

  7. XPath: Addresses for XML XPath Expressions /library /library/book /library/book/@name /library/book[@name="The Fourth Civilization"] /library/book[1] //book[2] <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  8. XPath: Addresses for XML XPath Expressions /library /library/book /library/book/@name /library/book[@name="The Fourth Civilization"] /library/book[1] //book[2] <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  9. XPath: Addresses for XML XPath Expressions /library /library/book /library/book/@name /library/book[@name="The Fourth Civilization"] /library/book[1] //book[2] <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization"/> </library>

  10. XPath: Addresses for XML XPath Expressions /library /library/book /library/book/@name /library/book[@name="The Fourth Civilization"] /library/book[1] //book[2] <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library> Predicate

  11. XPath: Addresses for XML XPath Expressions /library /library/book /library/book/@name /library/book[@name="The Fourth Civilization"] /library/book[1] //book[2] <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  12. XPath: Addresses for XML XPath Expressions /library /library/book /library/book/@name /library/book[@name="The Fourth Civilization"] /library/book[1] //book[2] <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  13. XPath: Addresses for XML XPath Node selectors /library/* /library/book[1]/text() /library/node()[1] . <library> <!-- comment --> <book>The Principles of Computer Hardware</book> <book name="The Fourth Civilization" /> </library>

  14. XPath: Addresses for XML XPath Node selectors /library/* /library/book[1]/text() /library/node()[1] . <library> <!-- comment --> <book>ThePrinciples of Computer Hardware</book> <book name="The Fourth Civilization" /> </library>

  15. XPath: Addresses for XML XPath Node selectors /library/* /library/book[1]/text() /library/node()[1] . <library> <!-- comment --> <book>The Principles of Computer Hardware</book> <book name="The Fourth Civilization" /> </library>

  16. XPath: Addresses for XML XPath Node selectors /library/* /library/book[1]/text() /library/node()[1] . <library> <!-- comment --> <book>The Principles of Computer Hardware</book> <book name="The Fourth Civilization" /> </library> Selects the "current" node

  17. XPath: Addresses for XML XPath Axes /library/child::book(or /library/book for short) /descendent-or-self::book(or //book for short)‏ //book[1]/parent::*(or //book[1]/.. for short) //book[2]/preceding-sibling::book //book[1]/attribute::name(or //book[1]/@name for short) <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  18. XPath: Addresses for XML XPath Axes /library/child::book(or /library/book for short) /descendent-or-self::book(or //book for short) //book[1]/parent::*(or //book[1]/.. for short) //book[2]/preceding-sibling::book //book[1]/attribute::name(or //book[1]/@name for short) <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  19. XPath: Addresses for XML XPath Axes /library/child::book(or /library/book for short) /descendent-or-self::book(or //book for short) //book[1]/parent::*(or //book[1]/.. for short) //book[2]/preceding-sibling::book //book[1]/attribute::name(or //book[1]/@name for short) <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  20. XPath: Addresses for XML XPath Axes /library/child::book(or /library/book for short) /descendent-or-self::book(or //book for short) //book[1]/parent::*(or //book[1]/.. for short) //book[2]/preceding-sibling::book //book[1]/attribute::name(or //book[1]/@name for short) <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  21. XPath: Addresses for XML XPath Axes /library/child::book(or /library/book for short) /descendent-or-self::book(or //book for short)‏ //book[1]/parent::*(or //book[1]/.. for short) //book[2]/preceding-sibling::book //book[1]/attribute::name(or //book[1]/@name for short) <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  22. XPath: Addresses for XML XPath Functions //book[last()] count(//book) name(/*) //book[contains(@name, "C++")] //book[not(contains(@name, "C++"))] <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  23. XPath: Addresses for XML XPath Functions //book[last()] count(//book) name(/*) //book[contains(@name, "C++")] //book[not(contains(@name, "C++"))] Returns: 2 <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  24. XPath: Addresses for XML XPath Functions //book[last()] count(//book) name(/*) //book[contains(@name, "C++")] //book[not(contains(@name, "C++"))] Returns: "library" <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  25. XPath: Addresses for XML XPath Functions //book[last()] count(//book) name(/*) //book[contains(@name, "C++")] //book[not(contains(@name, "C++"))] <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  26. XPath: Addresses for XML XPath Functions //book[last()] count(//book) name(/*) //book[contains(@name, "C++")] //book[not(contains(@name, "C++"))] <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  27. XPath: Addresses for XML Other Useful XPath Functions position() – provides the position in a list (nice for numbering a sequence of nodes) sum(xpath) – takes a sequence of nodes and adds up their numerical values – see also avg(), min(), max() concat(string, string, …) – exactly what you think string-length(string) – returns the number of characters substring(string, start[, length]) – the first char is at 1 translate(source-string, find-string, replace-string) – looks for individual chars and replaces themExample: translate("ABCD", "BD", "bd")  "AbCd"

  28. XPath: Addresses for XML XPath Operators //book[last() or contains(@name, "C++")] //book[string-length(@name) > 5] //book[1] | //book[2] Other operators: and, =, >, <=, >=, !=, +, -, *, div, mod Don't forget to escape < >! <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  29. XPath: Addresses for XML XPath Operators //book[last() or contains(@name, "C++")] //book[string-length(@name) > 5] //book[1] | //book[2] Other operators: and, =, >, <=, >=, !=, +, -, *, div, mod Don't forget to escape < >! <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  30. XPath: Addresses for XML XPath Operators //book[last() or contains(@name, "C++")] //book[string-length(@name) > 5] //book[1] | //book[2] Other operators: and, =, >, <=, >=, !=, +, -, *, div, mod Don't forget to escape < >! <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  31. XPath: Addresses for XML XPath Operators //book[last() or contains(@name, "C++")] //book[string-length(@name) > 5] //book[1] | //book[2] Other operators: and, =, >, <=, >=, !=, +, -, *, div, mod Don't forget to escape < >! <library> <book name="C++ How to Program" /> <book name="The Fourth Civilization" /> </library>

  32. Try it out Make an XML file Make an XSLT file Run the transform and view the transformed data XSLT Basics <xml /> input <xsl:… /> transform <xml /> (or text) output

  33. Sample XML <person> <name first="Neil" last="Armstrong" /> <quote>...one giant leap for mankind.</quote> </person> Sample Output Neil Armstrong said "...one giant leap for mankind." Sample XSLT <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" /> <xsl:template match="/person"> <xsl:value-of select="concat(name/@first, ' ', name/@last)" /> said " <xsl:value-of select="quote"/>" </xsl:template> </xsl:stylesheet> XSLT Basics

  34. Sample XML <person> <name first="Neil" last="Armstrong" /> <quote>...one giant leap for mankind.</quote> </person> Sample Output Neil Armstrong said "...one giant leap for mankind." Sample XSLT <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" /> <xsl:template match="/person"> <xsl:value-of select="concat(name/@first, ' ', name/@last)" /> said " <xsl:value-of select="quote" />" </xsl:template> </xsl:stylesheet> XSLT Basics

  35. Sample XML <person> <name first="Neil" last="Armstrong" /> <quote>...one giant leap for mankind.</quote> </person> Sample Output Neil Armstrong said "...one giant leap for mankind." Sample XSLT <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" /> <xsl:template match="/person"> <xsl:value-of select="concat(name/@first, ' ', name/@last)" /> said " <xsl:value-of select="quote"/>" </xsl:template> </xsl:stylesheet> XSLT Basics

  36. Sample XML <person> <name first="Neil" last="Armstrong" /> <quote>...one giant leap for mankind. </quote> </person> Sample Output <html><head><title>Neil Armstrong</title></head> <body><blockquote>…one giant leap for mankind.</blockquote> </body></html> Sample XSLT  HTML <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/person"> <html><head><title> <xsl:value-of select="concat(name/@first, ' ', name/@last)" /> </title></head><body> <blockquote><xsl:value-of select="quote"/></blockquote> </body></html> </xsl:template> </xsl:stylesheet> XSLT Basics All well-formed

  37. Sample XML <person> <name first="Neil" last="Armstrong" /> <quote>...one giant leap for mankind. </quote> </person> Sample Output <html><head><title>Neil Armstrong</title></head> <body><blockquote>…one giant leap for mankind.</blockquote> </body></html> Sample XSLT  HTML <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/person"> <html><head><title> <xsl:value-of select="concat(name/@first, ' ', name/@last)" /> </title></head><body> <blockquote><xsl:value-of select="quote"/></blockquote> </body></html> </xsl:template> </xsl:stylesheet> XSLT Basics

  38. Sample XML <person> <name first="Neil" last="Armstrong" /> <quote>...one giant leap for mankind. </quote> </person> Sample Output <quote><speaker firstname="Neil" lastname="Armstrong"/> <text>…one giant leap for mankind.</text> </quote> Sample XSLT  XML <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" /> <xsl:template match="/person"> <quote><speaker firstname="{name/@first}" lastname="{name/@last}"/> <text><xsl:value-of select="quote"/></text> </quote> </xsl:template> </xsl:stylesheet> XSLT Basics

  39. Sample XML <person> <name first="Neil" last="Armstrong" /> <quote>...one giant leap for mankind. </quote> </person> Sample Output <quote><speaker firstname="Neil" lastname="Armstrong"/> <text>…one giant leap for mankind.</text> </quote> Sample XSLT  XML <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" /> <xsl:template match="/person"> <quote><speaker firstname="{name/@first}" lastname="{name/@last}"/> <text><xsl:value-of select="quote"/></text> </quote> </xsl:template> </xsl:stylesheet> XSLT Basics

  40. Sample XML <person> <name first="Neil" last="Armstrong" /> <quote>...one giant leap for mankind. </quote> </person> Sample Output <quote><speaker firstname="Neil" lastname="Armstrong"/> <text>…one giant leap for mankind.</text> </quote> Sample XSLT  XML <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" /> <xsl:template match="/person"> <quote><speaker firstname="{name/@first}" lastname="{name/@last}"/> <text><xsl:value-of select="quote"/></text> </quote> </xsl:template> </xsl:stylesheet> XSLT Basics

  41. Sample XML <zoo> <birds> <albatross pop="4" /> <buzzard pop="2" /> <chickadee pop="12" /> </birds> <mammals> <aardvark pop="5" /> <bat pop="200" /> <cheetah pop="2" /> </mammals> </zoo> Sample XSLT  HTML <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/zoo"> <html><head><title>Zoo</title></head><body> <xsl:for-each select="*"> <h1> <xsl:value-of select="name(.)" /> </h1> </xsl:for-each> </body></html> </xsl:template> </xsl:stylesheet> XSLT Loops: for-each

  42. Sample XML <zoo> <birds> <albatross pop="4" /> <buzzard pop="2" /> <chickadee pop="12" /> </birds> <mammals> <aardvark pop="5" /> <bat pop="200" /> <cheetah pop="2" /> </mammals> </zoo> Result HTML <html><head><title>Zoo</title></head><body> <h1> birds </h1> <h1> mammals </h1> </body></html> XSLT Loops: for-each

  43. Sample XML <zoo> <birds> <albatross pop="4" /> <buzzard pop="2" /> <chickadee pop="12" /> </birds> <mammals> <aardvark pop="5" /> <bat pop="200" /> <cheetah pop="2" /> </mammals> </zoo> Sample XSLT  HTML <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/zoo"> <html><head><title>Zoo</title></head><body> <xsl:for-each select="*"> <h1><xsl:value-of select="name(.)" /></h1> <ul><xsl:for-each select="*"> <li><xsl:value-of select="name(.)" /> (<xsl:value-of select="@pop">)</li> </xsl:for-each></ul> </xsl:for-each> </body></html> </xsl:template> </xsl:stylesheet> XSLT Loops: for-each

  44. Sample XML <zoo> <birds> <albatross pop="4" /> <buzzard pop="2" /> <chickadee pop="12" /> </birds> <mammals> <aardvark pop="5" /> <bat pop="200" /> <cheetah pop="2" /> </mammals> </zoo> Result HTML <html><head><title>Zoo</title></head><body> <h1>birds</h1> <ul> <li>albatross (4)</li> … </ul> <h1>mammals</h1> <ul> <li>aardvark (5)</li> … </ul> </body></html> XSLT Loops: for-each

  45. <xsl:template match="birds | mammals"> <h1><xsl:value-of select="name(.)" /></h1> <ul> <xsl:for-each select="*"> <li><xsl:value-of select="name(.)" /> (<xsl:value-of select="@pop"/>)</li> </xsl:for-each> </ul> </xsl:template> </xsl:stylesheet> XSLT Loops: apply-templates Sample XSLT <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/zoo"> <html> <head><title>Zoo</title></head> <body> <xsl:apply-templates select="*" /> </body> </html> </xsl:template>

  46. XML <zoo> <birds> <albatross pop="4" /> <buzzard pop="2" /> <chickadee pop="12" /> </birds> <mammals> <aardvark pop="5" /> <bat pop="200" /> <cheetah pop="2" /> </mammals> </zoo> XSLT … <xsl:template match="birds | mammals"> <h1><xsl:value-of select="name(.)" /> </h1> <p>We have more than 2...</p> <xsl:if test="*[@pop &gt; 2]"> <ul> <xsl:for-each select="*[@pop &gt; 2]"> <li><xsl:value-of select="name(.)" /></li> </xsl:for-each> </ul> </xsl:if> </xsl:template> … XSLT Decisions: if

  47. Sample XML <zoo> <birds> <albatross pop="4" /> <buzzard pop="2" /> <chickadee pop="12" /> </birds> <mammals> <aardvark pop="5" /> <bat pop="200" /> <cheetah pop="2" /> </mammals> </zoo> Result HTML <html><head><title>Zoo</title></head><body> <h1>birds</h1> <p>We have more than 2...</p> <ul> <li>albatross</li> <li>chickadee</li> </ul> <h1>mammals</h1> <p>We have more than 2...</p> <ul> <li>aardvark</li> <li>bat</li> </ul> </body></html> XSLT Decisions: if

  48. XML <zoo> <birds> <albatross pop="4" /> <buzzard pop="2" /> <chickadee pop="12" /> </birds> <mammals> <aardvark pop="5" /> <bat pop="200" /> <cheetah pop="2" /> </mammals> </zoo> XSLT fragment <xsl:template match="birds | mammals"> <ul><xsl:for-each select="*"> <li><xsl:value-of select="name(.)" /> (<xsl:choose> <xsl:when test="@pop = 2">a couple</xsl:when> <xsl:when test="@pop &lt;= 5">a few</xsl:when> <xsl:otherwise>many</xsl:otherwise> </xsl:choose>) </li> </xsl:for-each></ul> </xsl:template> XSLT Decisions: choose

  49. Sample XML <zoo> <birds> <albatross pop="4" /> <buzzard pop="2" /> <chickadee pop="12" /> </birds> <mammals> <aardvark pop="5" /> <bat pop="200" /> <cheetah pop="2" /> </mammals> </zoo> Result HTML <html><head><title>Zoo</title></head><body> <ul> <li>albatross (a few)</li> <li>buzzard (a couple)</li> <li>chickadee (many)</li> </ul> <ul> <li>aardvark (a few)</li> <li>bat (many)</li> <li>cheetah (a couple)</li> </ul> </body></html> XSLT Decisions: choose

  50. XML <zoo> <birds> <albatross pop="4" /> <buzzard pop="2" /> <chickadee pop="12" /> </birds> <mammals> <aardvark pop="5" /> <bat pop="200" /> <cheetah pop="2" /> </mammals> </zoo> XSLT fragment <xsl:template match="birds | mammals"> <xsl:variable name="total-animals" select="sum(*/@pop)" /> <ul><xsl:for-each select="*"> <li><xsl:value-of select="name(.)" /> (<xsl:value-of select="round(100 * @pop div $total-animals)"/>% of all <xsl:value-of select="name(..)"/>) </li> </xsl:for-each></ul> </xsl:template> XSLT Variables: variable