|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Trasformazione xml -> html con xslt
Ho un problema con un processore xslt (saxon 6.5.3) che sembra eseguire male l'iterazione con il for; io gli dico di iterare per ogni nodo <item> del nodo corrente e di produrre per ciascuno un blocco <li>...<li> in una lista; ma alla fine mi trovo una lista con molti piu elementi di quelli elencati nel documento xml; se visualizzo il file xml direttamente con Internet Explorer me lo visualizza correttamente, mentre con FireFox ottengo lo stesso risultato di saxon. Questo è il file a.xml:
Codice:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="a.xsl"?> <document> <list> <item>1</item> <item>2</item> <item>3</item> </list> </document> Codice:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body> <xsl:apply-templates select="//list"/> </body></html> </xsl:template> <xsl:template match="list"> <ul> <xsl:for-each select="node()"> <li>elemento <xsl:apply-templates select="." /> </li> </xsl:for-each> </ul> </xsl:template> </xsl:stylesheet> Codice:
<html>
<body>
<ul>
<li>elemento
</li>
<li>elemento 1
</li>
<li>elemento
</li>
<li>elemento 2
</li>
<li>elemento
</li>
<li>elemento 3
</li>
<li>elemento
</li>
</ul>
</body>
</html>
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Re: Trasformazione xml -> html con xslt
con node() identifichi anche i nodi di testo vuoti, presenti tra un item e l'altro, come da specifica W3C:
Quote:
Secondo specifica questi nodi vuoti dovrebbero essere eliminati in fase di parsing, a meno di esplicite direttive per preservarli. Non e' che hai settato qualche direttiva in SAXON x modificare questo? In alternativa prova con il seguente codice (che ti evita anche il ciclo for, che personalmente ritengo da evitare se possibile in XSLT Codice:
.....
<xsl:template match="list">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="item">
<li>elemento <xsl:value-of select="."/></li>
</xsl:template>
.....
Quote:
http://xml.apache.org/xalan-j/index.html Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
||
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
razie per la risposta, temevo di esserel'unico qui ad occuparmi di xslt...
In effetti avevo gia risolto mettendo * al posto di node(), e aveva funzionato, anche se non riuscivo a capire il comportamento di node(). Poi ci ero arrivato facendo un po di prove e inserendo del testo qua e la e avevo intuito qquel che faceva. In effetti mi ero gia scaricato anche xalan, e quando ho visto che mi produceva lo stesso output di saxon ho capito che ero io a sbagliare... La cosa strana era pero che Internet explorer mi visualizzava i risultati come volevo io, ingnorando le parti di testo, a differenza di firefox che invece mi ha fattoa ccorgere dell'errore. il motivo per cui nonho utilizzato la forma: <xsl:template match="item"> <li>elemento <xsl:value-of select="."/></li> </xsl:template> è perche in altri contesti <item> non deve essere trasformato in un <li>. probablemnte pero si poteva fare anche in altri modi senza il for, forse utilizzando i mode?
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Ottimo, in effetti con * si identificano i soli element, e non nodi generici che potrebbero essere anche di altri tipi.
Per essere + precisi, si potrebbe matchare solo gli elementi <item> , in modo che se si aggiungono ulteriori elementi differenti, non vengono inseriti nella lista di output Codice:
.... <xsl:for-each select="item"> ... Quote:
Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:09.



















