xslt i robin burke ect 360. outline xslt processing xslt syntax xpath xslt basics lab
TRANSCRIPT
XSLT I
Robin Burke
ECT 360
Outline
XSLT processing XSLT syntax XPath XSLT basics Lab
Admin
Announcement Milestone #4
high-techentrepreneurshipnetworking event
Friday, October 21 5-7pm, CTI Collaboration Lab, Free
Surf to www.depaulcti.com for more information
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
XSL-FO Example
XMLdocument
XML-FOdocument
PDFdocument
XSLTstylesheet
XSLTengine
Renderingengine
XSLT HTML example
XMLdocument
HTMLdocument
XSLTstylesheet
XSLTengine
Browser
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 languagelacks many conventional facilitiestechnically a "tree-rewriting" language
XSLT 2.0is 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
XML Document
entries
entry
address descrip
name line line phone
TEXTA & B
PerformanceAutomotive,
Inc.
TEXT20 FourthAvenue
TEXTHawthorne,NJ 07506
TEXT201-427-4464
TEXTEarly pickups and wagons;
has '45-87 Jeep parts
advertiser = "true"averageRating = "3.3" entry
address descrip
name line line phone
TEXTAJ's 4 WheelDrive Center
TEXT86 Guinter
Road
TEXTJersey Shore,
PA 17740
TEXT570-398-7520
TEXTFiberglass bodies and
accessories CJ-2A thruWrangler; one piece Wrangler
hood/fenders, tops
averageRating = "4.1"
web
TEXTwww.ajsjeepb
odies.com
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 elementinstantiates contents once for every
node in set
Example
listing just names
Multiple templates
Typically a stylesheet will have multiple templatesEasier to read / debugTemplates often correspond to
elementsMore 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
Example
Whitespace
XSLT automatically removes whitespacethis is often correctwhen it isn't
• use text element
Path mismatch
Biggest source of errorsend path has no content
Check pathlocal pathtemplate matchapply-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 selectedbefore they are operated onfor-eachapply-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
Break / Lab