Newsgroup: it.comp.www.php
Titolo: Fare ricerche all'interno di un XML

Ho una serie di dati (un elenco di dischi musicali) in un file XML e dovrei,
sulla base di certe informazioni fornite dall'utente (ad esempio all'interno
di una form html), restituire un nuovo documento xml che contenga solo
alcune delle voci presenti (es. se l'utente richiede i metallica, restituirà
solo le voci degli album che hanno nomegruppo='metallica').
<dischi>
    <voce id="001">
        <nomegruppo>Metallica</nomegruppo>
        <titoloopera>Kill 'Em All</titoloopera>
            <etichetta>Vertigo</etichetta>
            <genere>Metal</genere>
        </titoloopera>
    </voce>
    <voce id="002">
        <nomegruppo>Metallica</nomegruppo>
        <titoloopera>Ride The Lightning
            <etichetta>Vertigo</etichetta>
            <genere>Metal</genere>
        </titoloopera>
    </voce>
    <voce id="003">
        <nomegruppo>Iron Maiden</nomegruppo>
        <titoloopera>Fear of the Dark
            <etichetta>EMI</etichetta>
            <genere>Metal</genere>
        </titoloopera>
    </voce>
</dischi>
Per effettuare la ricerca e dar fuori l'elenco secondo le richieste, abbiamo
pensato di usare xslt; menter per prendere le richieste e passarle all'xslt
abbiamo usato php con le funzioni di sablotron. Il problema è che non
riusciamo ad usare i parametri passati con sabotron nell'xslt.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="
http://www.w3.org/1999/XSL/Transform
"
xmlns:fo="
http://www.w3.org/1999/XSL/Format
">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
  <xsl:param name="tipo"/>
  <xsl:param name="chiave"/>
<xsl:template match="dischi">
  <xsl:for-each select="voce">
   <xsl:if test="contains($tipo,'$chiave')">
   <br />
    <xsl:apply-templates>
    </xsl:apply-templates>
   </xsl:if>
  </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Il mio scopo è di confrontare il valore del tag (in $tipo) con il valore
della richiesta dell'utente (in $chiave), es. se l'utente decide di fare una
ricerca per gruppi e sceglie 'metallica', dovrò confrontare, per ogni album,
il valore contenuto nel tag 'nomegruppo' con il valore 'metallica', e
stampare solo gli album dei metallica.
Per passare i parametri, ho usato le funzioni di sablotron in questo modo.
<?php
// Allocate a new XSLT processor
$xh = xslt_create();
// Process the document
$arguments = array (
);
$parameters = array (
 "tipo" => "nomegruppo",
 "chiave" => "Metallica"
);
if ($result = xslt_process($xh, 'elenco.xml', 'elenco.xsl', NULL,
$arguments, $parameters))
{
 print $result ;
}
else
{
   print "error code is " . xslt_errno($xh);
}
xslt_free($xh);
?>
Il mio problema è che non riesco a usare i due parametri nella sezione xslt
per poter effetturare la ricerca.
Avete qualche consiglio da darmi? Come posso fare per renderlo operativo?
Grazie in anticipo per le risposte,
Luca






<xsl:template match="dischi">

</xsl:stylesheet>


<?php



Il mio problema è che non riesco a usare i due parametri nella sezione xslt
per poter effetturare la ricerca.
Avete qualche consiglio da darmi? Come posso fare per renderlo operativo?
Grazie in anticipo per le risposte.

 
http://it.php.net/manual/it/function.xslt-process.php#39285
-- 
Spoken: How much is that gorilla in the window?
Take our advice, At any price, A gorilla like Magilla is mighty nice.
Gorilla, Magilla Gorilla for sale

 
http://it.php.net/manual/it/function.xslt-process.php#39285
Non è lo stesso caso...
Nel tuo link le variabili vengono passate ad un tag <xsl:value-of select="">
(e questo funziona anche da me)...
Quello che non mi funziona invece è passarle ad un tag <xsl:if test=""> in
modo da visualizzare solo i nodi che verificano quel determinato enunciato.
E in questo caso non ne vuole sapere di leggere le variabili passategli dal
php....
 ciao
-- 
SigiTM
Togli 'NOSPAMMM' per rispondermi.
Visita il sito dei Metal Detector: 
http://listen.to/metaldetector

 
Ok, non conosco la soluzione al tuo caso, vedi un pò se ti può essere 
utile questo link:
http://archive.gingerall.cz/archives/public/sablot2004/msg00187.html
Ovvero: come eseguire codice php dentro a fogli di stile xslt (ma la 
trasformazione avviene prima dell'esecuzione del codice php)
Ciao
