Invece no, però sto incontrando seri problemi comunque a farlo e vorrei capirne il perché se qualcuno mi aiuta.
(per i mod: ho trovata questa discussione che pare faccia al caso mio, evito di aprirne un'altra uguale, se per voi va bene, altrimenti dividetela se credete giusto farlo)
Allora: anche io ho lo stesso problema con un CMS che sto costruendo, in pratica in ogni file XML c'è il contenuto di una pagina processata dal relativo XSLT e fino qui mi pare tutto normale.
Il problema lo incontro nel momento che devo unire ad ogni pagina il menù del sito, che è su un file xml separato.
I motivi di questa configurazione mi sono apparsi ovvi nel momento che ho cercato un buon metodo per gestire il menù in modo separato, senza dover aprire ogni volta tutti gli XML delle pagine per modificarne la sezione menù.
Ma nonostante questa sembrasse la soluzione più ovvia, non funziona.
Probabilmente la colpa è mia dato che sono un neofito di trasformazioni XSL.
Vi faccio degli esempi:
il file menu.xml
codice:
<?xml version="1.0" encoding="ISO-8859-1"?>
<menu.sito>
<li id="0">
<href>./</href>
<title>l'home page del sito</title>
<rel></rel>
<testo>Home Page</testo>
<li id="1">
<href>./admin/</href>
<title>amministrazione del sito</title>
<rel></rel>
<testo>Amministrazione</testo>
</menu.sito>
il file della pagina da processare, in questo semplice caso una index.xml
codice:
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<title>Sito in costruzione (fantasioso)</title>
<banner>
<img>
<url>img/logo.gif</url>
<alt>logo ufficiale del sito</alt>
</img>
<h1>Il mio sito</h1>
<h2>prova del sito</h2>
</banner>
<corpo.pagina>
<h1>Il mio sito</h1>
<h2>sito in perenne costruzione</h2>
</corpo.pagina>
<piede>
<testo>Sito realizzato da Marco GRAZIA © 2007 - 2008</testo>
<link />
</piede>
</root>
All'interno del file XSL (che è molto grande e che quindi metterò a spezzoni) il template che si occupa di creare il menù è il seguente:
index.xsl
codice:
<xsl:template match="menu.sito">
<xsl:element name="div">
<xsl:attribute name="id">left-bar</xsl:attribute>
<xsl:element name="ul">
<xsl:attribute name="class">menuNav</xsl:attribute>
<xsl:apply-templates />
</xsl:element>
</xsl:element>
<xsl:element name="hr"/>
</xsl:template>
<xsl:key name="1" match="//menu.sito/li" use="@id"/>
<xsl:template match="li">
<xsl:element name="li">
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="key('1',@id)/href"/></xsl:attribute>
<xsl:attribute name="title"><xsl:value-of select="key('1',@id)/title"/></xsl:attribute>
<xsl:if test="key('1',@id)/rel!=''">
<xsl:attribute name="rel"><xsl:value-of select="key('1',@id)/rel"/></xsl:attribute>
</xsl:if>
<xsl:value-of select="key('1',@id)/testo"/>
</xsl:element>
</xsl:element>
</xsl:template>
il primo template (menu.sito) si occupa di creare l'elemento <div> con all'interno la classe chiamante il foglio di stile per il menù e poi di aprire una lista <ul>.
Il secondo template (li) si occupa di richiamare dalla struttura di menu.xml tutti gli elementi a formare le liste con all'interno i menù.
Se concateno a mano i due files XML, e cioè: index.xml e menu.xml i template funzionano alla perfezione e ho la pagina in output perfetta.
Ma se provo a unire i due documenti XML così come descritto dal W3C iniziano i problemi.
La sintassi appare semplice in effetti. (adattata al mio caso)
Si richiede: <xsl:variable name="menu" select="document('menu.xml')/menu.sito"/>
il name menu è la variabile che contiene (o dovrebbe contenere) il file selezionato, ovvero menu.xml.
Ho fatto delle prove, ma non c'è verso di far apparire nulla.
Ho creato un semplice template ad hoc:
codice:
<xsl:template match="prova">
<xsl:value-of select="$menu/li/testo"/>
</xsl:template>
che richiamato all'interno di un paragrafo avrebbe dovuto far apparire il testo, ma nulla, non mi appare nemmeno un singolo messaggio di un sippur piccolo errore, semplicemente non appare nulla, come se menu.xml non esista, e so che esiste nella directory.
Se qualcuno sa darmi una mano sarà una mano per tutti coloro che hano il mio stesso problema.
Grazie.