Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

XSLT

913 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

XSLT

  1. 1. XSL-T Eidon School
  2. 2. Agenda Introduzione e richiami formali Più in dettaglio Esempi Esercitazione l’aiuto del parser e browser PAUSA Esercitazione l’aiuto del parser e browser
  3. 3. 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
  4. 4. Fonte: w3.org XSL
  5. 5. 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
  6. 6. 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>
  7. 7. DEMOApplichiamo al nostro xml l’xslt appena vistojava AccessXSLTC -IN Elenco.xml -XSL nudoecrudo.xslt
  8. 8. 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
  9. 9. 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
  10. 10. 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
  11. 11. 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( )"/>
  12. 12. 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>
  13. 13. 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.
  14. 14. 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"/>
  15. 15. 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!
  16. 16. 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>
  17. 17. 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>
  18. 18. 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>
  19. 19. 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>
  20. 20. 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>
  21. 21. 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"/>
  22. 22. 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)
  23. 23. XSL-T: altri elementi comuni xsl:copy xsl:variable xsl:comment xsl:preserve-space xsl:element xsl:apply-templates xsl:output xsl:number…
  24. 24. XSL-T: funzioni current() document() format-number() function-available() element-available()+ naturalmente quelle di XPATH
  25. 25. ESERCITAZIONI
  26. 26. OrdinaleModificando il file Elenco.xslt, inserire una prima colonna con l’ordinale.Suggerimento: position()
  27. 27. Soluzione… <tr> <th>Num</th> <th>…… <td> <xsl:value-of select="position( )"/> </td>…
  28. 28. E..Non voglio un numero arabo ma un numero romano….Suggerimento:xsl:number e position()
  29. 29. Soluzione…<td> <xsl:number level="single" format="I" value="position()"/></td>…
  30. 30. Stringhe …Se la partita iva inizia con “IT…” il testo della stessa deve essere in italico:Suggerimento: xsl:if e funzione xpath starts-with
  31. 31. 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>…
  32. 32. Ordinare i recordModificando il file Elenco.xslt, far rendeizzare i record ordinati per codice_client discendenteSuggerimento:xsl:sort
  33. 33. Soluzione…</tr> <xsl:for-each select="record"> <xsl:sort select="codice_cliente" order="descending" data-type="number"/> <tr> <td>…
  34. 34. Avere un effetto di bgcolor simile a:Suggerimento: xsl:attribute, xsl:choose, position() e bgcolor(html)
  35. 35. 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>…
  36. 36. Inserire il totale dei prodotti Suggerimento: xsl:value-of e sum()
  37. 37. Soluzione… </table> <h2>Totale prodotti <xsl:value-of select="sum(record/num_prodotti)"></xsl:valu e-of></h2> </body>…
  38. 38. Aggiungere e formattare il numero deiprodottiSuggerimento: xsl:decimal-format e format- number()
  39. 39. Soluzione<xsl:decimal-format name="euro" decimal- separator="," grouping-separator="."/>… <td> <xsl:value-of select="format- number(num_prodotti, € #.###,00, euro)"/> </td>…
  40. 40. Inserire uno spazio tra 007 e Mercato
  41. 41. Soluzione…nt><xsl:text> </xsl:text><xsl:value-of s…
  42. 42. 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.
  43. 43. 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)

×