230 likes | 361 Vues
This guide explores the use of XSLT (Extensible Stylesheet Language Transformations) for transforming XML data. It includes a detailed example featuring a historical letter, demonstrating how to create an XSLT stylesheet that extracts and formats XML elements. Through practical exercises, readers will learn how to match XML structures and apply transformations using templates and xpath expressions. This resource is ideal for developers, data analysts, and anyone interested in leveraging XML and XSLT for data presentation and manipulation.
E N D
Digital Media Technology Week 6
XSLT XML Source XSLT Stylesheet XML Result
<xsl:stylesheet> </xsl:stylesheet> <xsl:template match=“collection” ></xsl:template> <xsl:template match=“letter” ></xsl:template>
Example: XML source <?xml version="1.0" encoding="UTF-8"?> <letter> <head>Letter from De Erven F. Bohn to W. Blackwood and sons, January 22nd, 1873</head> <body> <dateline> <place>Haarlem</place> <date>22 January 1873</date> </dateline> <greeting>Dear Sirs!</greeting> <p>We beg to apply to you the kind request for sending us one week before the publication one copy of Bulwer's novel: <title>Kenelm Chillingly, His adventures and opinions</title>, which book you have in the press, for what we are inclined to pay 30 £. When it were possible to send us already now the first volume by the post; it would be yet more agreeable. Mr H.A. Kramers at Rotterdam readily will be our pledge.</p> <salute> your truly</salute> <signed>De Erven F. Bohn</signed> </body> </letter>
Getting started • Include a template that points to the root element of the XML source. <?xml version="1.0" encoding="UTF-8"?> <letter> <head>Letter from De Erven F. Bohn to W. Blackwood and sons, January 22nd, 1873</head> <body> ….</body> </letter>
XSLT XML Source <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="letter"> </xsl:template> </xsl:stylesheet> <?xml version="1.0" encoding="UTF-8"?> <letter> … </letter> XML Result
Elements within <xsl:template> • Literal text can be added with the <xsl:text>element. e.g.<xsl:text>This sentence will be visible in the result.</xsl:text> • HTML tags may be added directlye.g.<i><xsl:text>This text will be italicised<xsl:text></i>
Elements within <xsl:template> • Use <xsl:value-of> to select text from the XML source. e.g.<xsl:value-of select=“head”/><xsl:value-of select=“body/dateline”/> • Note that the paths in the select-attribute must depart from the element mentioned in the match-attribute of <xsl:template>
XSLT stylesheet <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match=“letter"> <html> <head> <title> <xsl:text>XSLT transformation</xsl:text> </title> </head> <body> <h2> <xsl:value-of select=“head”> </h2> </body> </html> </xsl:template> </xsl:stylesheet>
Example: XML source <?xml version="1.0" encoding="UTF-8"?> <EU> <country> <name> Belgium </name> <capital>Brussels</capital> </country> <country> <name>Cyprus </name> <capital>Nicosia</capital> </country> <country> <name>Denmark </name> <capital>Copenhagen</capital> </country> … </EU>
XSLT stylesheet <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="EU"> <ul><li> <xsl:text>The capital of </xsl:text> <xsl:value-of select="country/name"/> <xsl:text> is </xsl:text> <xsl:value-of select="country/capital"/> <xsl:text>.</xsl:text> </li></ul> </xsl:template> </xsl:stylesheet>
<xsl:for-each> needs to be used if all the elements on a certain level need to be shown. • This XSLT element takes a select-attribute • Note that the paths within <xsl:for-each> must depart from the element that is mentioned mentioned in the select-attribute.
XSLT stylesheet <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="EU"> <ul> <xsl:for-each select="country"> <li> <xsl:text>The capital of </xsl:text> <xsl:value-of select="name"/> <xsl:text> is </xsl:text> <xsl:value-of select="capital"/> <xsl:text>.</xsl:text> </li> </xsl:for-each> </ul> </xsl:template> </xsl:stylesheet>
<xsl:sort> • Use <xsl:sort> to sort a list alphabeticaly or numerically • This XSLT element also takes a select-attribute. It refers to the element the XSLT processor must sort by • <xsl:sort> must be the direct child of <xsl:for-each> (or <xsl:apply-templates>)
<xsl:if> • <xsl:if> takes a “test” attribute • The instructions within <xsl:if> will only be carried out if the criterion in the test attribute can be evaluated as true • Example:<xsl:if test=“date”> <xsl:value=“date”/></xsl:if>
The items that will be selected within the <xsl:for-each> loop can be filtered by adding a criterion within square brackets, directly after the element name. • Operators that can be used to formulate such tests:
Elements within <xsl:template> • <xsl:value-of> • <xsl:text> • <xsl:for-each> • <xsl:sort> • <xsl:if>