XSLT
Upcoming SlideShare
Loading in...5
×
 

XSLT

on

  • 540 views

 

Statistics

Views

Total Views
540
Views on SlideShare
540
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    XSLT XSLT Presentation Transcript

    • XSL-T Eidon School
    • Agenda Introduzione e richiami formali Più in dettaglio Esempi Esercitazione l’aiuto del parser e browser PAUSA Esercitazione l’aiuto del parser e browser
    • Cos’è XSL-T Raccomandazione del W3C (la 1.0 novembre 1999, 2.0 gennaio 2007) È un linguaggio XML che Trasforma un documento (XML) in input in un altro documento XML, o in testo, html, xhtml… NS: http://www.w3.org/1999/XSL/Transform Contiene dei template che vengono applicati attraverso dei matching (che identificano gli elementi del documento di input) Il Data Model è identio a quello di XPATH
    • Fonte: w3.org XSL
    • Il nostro file di esempio Root Element / Root Node Document Elem <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="esempio1.xslt"?> <!--Anagrafica del clienti del mercato--> Process Instruc. <anagrafica> <testata> <nomemercato id="007">Mercato di test</nomemercato> Comment <data>Giovedi 18 dicembre 2003 16.05.29</data> </testata> <record> <codice_cliente>000105</codice_cliente> <rag_soc>Miami American Cafe</rag_soc>Element <codice_fiscale>IT07654930130</codice_fiscale> <indirizzo tipo="casa">Viale Carlo Espinasse 5, Como</indirizzo> <num_prodotti>13</num_prodotti> </record> <record> Attribute <codice_cliente>000302</codice_cliente> <rag_soc>Filiberto Gilardi</rag_soc> <codice_fiscale>IT87654770157</codice_fiscale> <indirizzo tipo="ufficio">Via Biancospini 20, Messina</indirizzo> <num_prodotti>8</num_prodotti> </record> </anagrafica> Text Node
    • Un file XSL-T “nudoecrudo.xslt”<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Tran sform"></xsl:stylesheet>
    • DEMOApplichiamo al nostro xml l’xslt appena vistojava AccessXSLTC -IN Elenco.xml -XSL nudoecrudo.xslt
    • Risultato<?xml version="1.0" encoding="UTF-8"? >Mercato di testGiovedi 18 dicembre 2003 16.05.295Miami American CafeIT07654930130Viale Carlo Espinasse 5, Como13si302Filiberto GilardiIT87654770157Via Biancospini 20, Messina81302EidonIT887511231Via Bassini 17/2, Milano18
    • L’elaborazione di XSL-T1. Legge il foglio di stile XSL-T2. Legge il documento XML in input3. Costruisce in output un documento che si ottiene trasformando l’input con le regole di template e pattern presenti nel foglio di stile4. Se il template non viene trovato, applica quello di default: in output tutto il testo contenuto nei tag
    • Il template <xsl:template match="anagrafica"><html>… Al macthing tra il nodo corrente e l’attributo match viene applicato il template È possibile usare LocationXPath, Axis e Predicati
    • Il template di default<xsl:template match="*|/"> <xsl:apply-templates/></xsl:template><xsl:template match="text( )|@*"> <xsl:value-of select="."/></xsl:template><xsl:template match="processing-instruction( )|comment( )"/>
    • Un esempio semplice<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Tran sform" version="1.0"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="anagrafica"> <xsl:value-of select="testata/nomemercato"/> </xsl:template></xsl:stylesheet>
    • XSL-T: xsl:value-of… <h1><xsl:value-of select=“XPathExpression"/></h1> ... Potete immaginare già a cosa serva... Recupera le informazioni puntate dalla stringa XPath. I tag che non appartengono al namespace xsl vengono riportati cosi come sono sul documento di output.
    • XSL-T: xsl:value-of<xsl:value-of select="3"/><xsl:value-of select="1 + 2"/><xsl:value-of select="@price + @tax"/><xsl:value-of select="@salary * 0.87"/><xsl:value-of select="@visitors div 365"/><xsl:value-of select="@days mod 7"/>
    • XSL-T: xsl:for-each <xsl:for-each select=“record"> … </xsl:for-each> Anche qui non è difficile capire significato: per ogni tag record contenuto nel nodo corrente, applica la struttura al suo interno. Naturalmente, al posto di RECORD, poteva esserci una qualunque istruzione XPath!
    • XSLT: xsl:sortAll’interno di un ciclo xsl:for-each ordina la sequenza degli elementi, è possibile utilizzarne anche più di uno:<xsl:for-each select="record"> <xsl:sort select=“elemento" order="ascending|descending" data-type=“text|number| qname-but-not-ncname"/> …</xsl:sort>
    • XSL-T: xsl:attribute<a onclick=“<xsl:value-of select="@name"/>”> <img hspace="0“ src="img.gif“ border="0"> <xsl:attribute name="id"> Img<xsl:value-of select="@name"/> </xsl:attribute> </img></a>
    • XSL-T: xsl:if<xsl:if test="js:IsEan(string(@ITEM_NO))"> <fo:instream-foreign-object width="28mm" height="8mm"> <svg:svg height="8mm" width="28mm"> …. </fo:instream-foreign-object></xsl:if>
    • XSL-T: xsl:choose<xsl:choose> <xsl:when test="trasporto = D"> <fo:block text-align="center">Destinatario</fo:block> </xsl:when> <xsl:when test="trasporto = ‘C"> <fo:block> <fo:instream-foreign-object> <svg:svg width="2mm"> …. </svg:svg> </fo:instream-foreign-object> </fo:block> </xsl:when> <xsl:otherwise> <fo:block text-align="center">Mittente</fo:block> </xsl:otherwise></xsl:choose>
    • XSL-T: xsl:textPreserva il testo contenuto per riportarlo inoutput senza variazioni sugli spazi:<xsl:text disable-output-escaping = "yes" | "no"> <!-- Content: #PCDATA --></xsl:text>
    • XSL-T: xsl:decimal-formatDeve essere figlio di xsl:stylesheet. Definiscequali sono i caratteri speciali utilizzati dallafunzione format-number:<xsl:decimal-format name="euro" decimal-separator="," grouping-separator="." digit="#"infinity="InFiNiTo" minus-sign="-" NaN="NaN"pattern-separator=";" per-mille="‰"percent="%" zero-digit="0"/>
    • XSL-T: format-number()<xsl:value-of select="format-number( 1 div0 ,€ ###,00, euro)"/>Parametri: 1) Il valore/xpath da formattare 2) La stringa di formattazione (http://java.sun.com/j2se/1.5.0/docs/api/java/text/Dec) 3) Il nome del DecimalFormat (facoltativo)
    • XSL-T: altri elementi comuni xsl:copy xsl:variable xsl:comment xsl:preserve-space xsl:element xsl:apply-templates xsl:output xsl:number…
    • XSL-T: funzioni current() document() format-number() function-available() element-available()+ naturalmente quelle di XPATH
    • ESERCITAZIONI
    • OrdinaleModificando il file Elenco.xslt, inserire una prima colonna con l’ordinale.Suggerimento: position()
    • Soluzione… <tr> <th>Num</th> <th>…… <td> <xsl:value-of select="position( )"/> </td>…
    • E..Non voglio un numero arabo ma un numero romano….Suggerimento:xsl:number e position()
    • Soluzione…<td> <xsl:number level="single" format="I" value="position()"/></td>…
    • Stringhe …Se la partita iva inizia con “IT…” il testo della stessa deve essere in italico:Suggerimento: xsl:if e funzione xpath starts-with
    • Soluzione…<td> <xsl:if test="starts-with(codice_fiscale, IT)"> <xsl:attribute name="style"> font-style:italic;</xsl:attribute> </xsl:if> <xsl:value-of select="codice_fiscale"/></td>…
    • Ordinare i recordModificando il file Elenco.xslt, far rendeizzare i record ordinati per codice_client discendenteSuggerimento:xsl:sort
    • Soluzione…</tr> <xsl:for-each select="record"> <xsl:sort select="codice_cliente" order="descending" data-type="number"/> <tr> <td>…
    • Avere un effetto di bgcolor simile a:Suggerimento: xsl:attribute, xsl:choose, position() e bgcolor(html)
    • Soluzione…<tr> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="position( ) mod 2">Silver</xsl:when> <xsl:otherwise>Gray</xsl:otherwise> </xsl:choose> </xsl:attribute><td>…
    • Inserire il totale dei prodotti Suggerimento: xsl:value-of e sum()
    • Soluzione… </table> <h2>Totale prodotti <xsl:value-of select="sum(record/num_prodotti)"></xsl:valu e-of></h2> </body>…
    • Aggiungere e formattare il numero deiprodottiSuggerimento: xsl:decimal-format e format- number()
    • Soluzione<xsl:decimal-format name="euro" decimal- separator="," grouping-separator="."/>… <td> <xsl:value-of select="format- number(num_prodotti, € #.###,00, euro)"/> </td>…
    • Inserire uno spazio tra 007 e Mercato
    • Soluzione…nt><xsl:text> </xsl:text><xsl:value-of s…
    • ESERCIZZZZIIIOOONEEEEQueste pagine sono fatte con questatecnologia:http://atcasa.corriere.it/Outlet-Co/outlet_campania.shtmlPartendo dalla sola pagina shtml, voglio ottenere unXML e un XSL-T.
    • Riferimentihttp://www.w3.org/TR/xslt/http://xmlsoft.org/http://www.slideshare.net/yht4ever/xpath-xml-path-lahttp://www.cs.unibo.it/~ghini/didattica/informatica_geXML in a Nutshell, Third Edition by Elliotte Rusty Harold and W. Scott Means (Paperback - Sep 23, 2004)