340 likes | 351 Views
Join CTI students and alumni to explore the possibilities of using IT skills to start your own company. Learn about DePaul's New Venture Competition and find teammates. Refreshments served.
E N D
XSLT I Robin Burke ECT 360
Outline • XSLT processing • XSLT syntax • XPath • XSLT basics • Lab
Admin • Announcement • Milestone #4
Friday, October 21 5-7pm, CTI Collaboration Lab, Free Surf to www.depaulcti.com for more information high-techentrepreneurshipnetworking event Have you ever thought of using your IT skills to start your own company? Join other CTI students and alumni in exploring the possibilities. e, CTI’s new high-tech entrepreneurship club invites you to an open house to mingle, network, and learn. We will present info on DePaul’s New Venture (business plan) Competition, with $5,000 in prizes – and help you find teammates. Refreshments served.
XML • XSL • "family" of standards • XSL-FO • formatting objects • typesetting • document = a set of geometric areas organized on pages • XSLT • transformations • XPath • supports both • a language for addressing individual XML nodes
XSLT syntax • XML document • stylesheet • root element • templates • "rule-based" processing
XSLT Processing • Let L be a list of nodes • Let T be a list of templates • style (L, T) = • Find a template t matching L • Instantiate t using L • May call style (L', T) • Return instantiated template • To process a document • style ( { root }, T )
Special purpose • XSLT is not a general-purpose programming language • lacks many conventional facilities • technically a "tree-rewriting" language • XSLT 2.0 • is more general purpose
Example <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <html> <head> <title>Jeep suppliers</title> </head> <body>The first one is <xsl:value-of select="/child::entries/child::entry[position() = 1]/child::address/child::name/child::text()" /></body> </html> </xsl:template> </xsl:stylesheet>
Note • stylesheet element • output type element
Running example • value-of1
XPath • XPath expression "/child::entries/child::entry[position() = 1]/child::address/child::name/child::text()" • How to read • "/" = root and delimiter for steps • axis::step = a move in the XML document • :: = "that is" or "that are" • [] = apply some predicate • position () = compute the position of this element in its list of siblings • text() = the element content • Result is a set of nodes
Axes • self • this node • child • immediate descendant • descendant • any descendant • attribute • attribute list • following • siblings to the right • preceding • siblings to the left
Steps • Depends on axis • element name • attribute name • can be associated with a predicate • foo[attribute::bar='5'] • entry[position() = 2]
XPath shortcuts • Axes can be abbreviated • default = child • @ = attribute • // = descendant • . = self • .. = parent • Steps • text() can be omitted • [position() = n] can be [n] • Abbreviated version "/child::entries/child::entry[1]/child::address/child::name/child::text()" "/entries/entry[1]/address/name"
Example • with simplified syntax
Paths • All "name" elements? • All advertisers? • All non-advertisers? • The rating of the second entry? • All advertisers with a rating above 3? • The second line of every address?
For-each • May want to operate on all nodes in a set • for-each element • instantiates contents once for every node in set
Example • listing just names
Multiple templates • Typically a stylesheet will have multiple templates • Easier to read / debug • Templates often correspond to elements • More modular
Templates • template element • match attribute • describes nodes that use the template • content • template to instantiate • apply-templates element • select attribute • what nodes to use • position shows where in the parent element the result is inserted
Whitespace • XSLT automatically removes whitespace • this is often correct • when it isn't • use text element
Path mismatch • Biggest source of errors • end path has no content • Check path • local path • template match • apply-template select • Match/select should overlap by one step
Example • template choice
Building an element <xsl:element name="a"> <xsl:attribute name="href">http:// <xsl:value-of select="." /> </xsl:attribute> <xsl:value-of select="." /> </xsl:element> Becomes <a href="http://foo.org/">foo.org</a>
Alternate syntax <a href="http://{.}"> <xsl:value-of select="." /></a> Becomes <a href="http://foo.org/">foo.org</a>
Sorting • We can sort node lists • after they are selected • before they are operated on • for-each • apply-templates • Embed sort element
Sorting, cont'd <xsl:apply-templates select="some/path"> <xsl:sort select="whatever/@foo" /> </xsl:apply-templates> What does this do?
Example • complex selection and sorting