Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Usare php per passare variabili a un foglio xslt

    Ho un foglio xml che contiene un testo letterario.
    Ho fatto un foglio xslt che mi traduce l'XML in una tabella, che mostra il testo e gli appunti che ho inserito in esso.
    Ora vorrei rendere la pagina dinamica inserendo un campo di ricerca.
    Ex. Una pagina HTML contiene un form che invia la variabile "keyword".. Ora vorrei che questa variabile fosse passata al un foglio , che la utilizzerebbe come filtro...
    Il modo più sempliice mi è sembrato di otterere la variabile con al funzione GET di php, ma non riesco a inserire il codice php nella pagina xslt... come devo agire?
    Il parser del browser non accetta codice php all'interno del foglio XSL (anzi, se ne infischia, non lo vede); se rinomino il foglio .xslt in .php si genera un errore...
    Che sintassi devo usare? C'è un modo più furbo per fiilttrare i dati XML con php?
    Grazie mille in anticipo,
    Davide

  2. #2
    Io ho tre soluzioni da proporti:
    1) da pagina HTML chiami con la post una pagina PHP che in realtà è un file XML. All'interno del file XML chiami il foglio di stile XSL che è un PHP al quale passe per parametro il parametro ricevuto dalla pagina HTML ($_POST[param]). E' macchinoso ma funziona.
    2) da pagina HTML chiami con la post una pagina PHP che in realtà è un file XML. Imposti in un tag XML il valore del parametro ricevuto dalla pagina HTML ($_POST[param]) e lo usi come filtro all'interno del file XSL.
    3)da pagina HTML chiami con la post una pagina PHP che in realtà è un file XML: farai in modo che l'XML generato sia diverso a seconda del parametro ricevuto dalla pagina HTML ($_POST[param]). Quindi il foglio di stile XSL non dovrà filtrare nulla.

    Entrambe le soluzioni funzionano ma in un certo senso io prediligo la seconda.

    Con lo stesso meccanismo puoi realizzare dei semplici form di ricerca basati interamente su XML!!!

  3. #3
    Grazie mille, Diego.
    La soluzione 3 è quella che mi pare più "pulita".
    in questo modo però dovrei filttrare il file XML tramite php...
    Che funzioni devo usare? La mia conoscenza di php è limitata alla gestione di MySql e alle funzioni base...
    Grazie ancora,
    Davide

  4. #4
    Dovrebbe essere sufficiente inserire istruzioni condizionali (if, switch-case, ecc.) per far stampare in output (echo, print) il tag che vuoi. Occhio all'utilizzo di ' oppure di " come delimitatore di stringa.

  5. #5
    Ciao Diego e grazie.
    Rimetto ora le mani sul progetto, che avveo dovuto rimandare causa incombenze più prossime...
    Ho optato per la tua soluzione n.2, ovvero php che passa un il POST all'XML dove è usato come <filtro> e quindi arriva all'XSLT, che agisce di conseguenza.
    Sto ancora facendo prove preliminari, ma ho un problema.
    Il codice php non funzione nè nelle pagine XML nè nelle pagine XSLT.
    Ho inserito dei semplici echo, ma il browser non riceve le informazioni.ù
    TI metto le prime righe di codice delle pagine, così vedi cosa intendo.
    Inizio di inf.dev.xml:
    codice:
    <inferno>
    <filtro>FILTRO: <?php
       echo "Filtro passsato in php";
       ?>-</filtro> 
        <canto>
            <n>1</n>
            <passo>
                <vv>1</vv>
                <dante>
                    <v>Nel mezzo del cammin di nostra vita</v>
                </dante>
                <carson>
                    <v>Halfway through the story of my life</v>
                </carson>
                <nota>
                    <n>Carson introduce story</n>
                </nota>
            </passo>
    ecc.
    inf-dev.xslt completo:

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="/">
    
    <html>
        <head>
            <title>Inferno: comparazione</title>
            <link rel="stylesheet" title="main" href="stile-inf.css" type="text/css" />
        </head>
        <body>
        <div id="container">
        
            <h1>Inferno</h1>
            <xsl:value-of select="inferno/filtro"/>
            <xsl:for-each select="inferno/canto">
                <div class="cant">
                <h2>
                    Canto <xsl:value-of select="n"/>
                </h2>
                <xsl:for-each select="passo">
                    
                    
                    
                
                    <div class="pass"> 
                        <xsl:value-of select="../n"/>, <xsl:value-of select="vv"/>
    <table border="0" width="100%">
                            <tr>
                                <td width = "50%">
                                    <xsl:for-each select="dante/v">
                                        <xsl:value-of select="."/>
                                        
    
                                    </xsl:for-each>
                                </td>
                                    
                                <td>
                                    <xsl:for-each select="carson/v">
                                        <xsl:value-of select="."/>
                                        
    
                                    </xsl:for-each>
                                </td>
                            </tr>
                        </table> 
                        <div class="note">
                        <xsl:for-each select="nota"> 
                            - <xsl:value-of select="."/>
                            
       
                        </xsl:for-each>
                        </div>
                    
                    </div>
                    
                    
    
                    
                 
                </xsl:for-each>
                           
            </div>            
            </xsl:for-each>
    
                </div>
                </body>
            </html>
        </xsl:template>
    </xsl:stylesheet>
    L'output è
    INFERNO
    FILTRO: -
    CANTO 1
    ecc..
    insomma, il php non lo vede...
    Grazie per ogni suggerimento...
    Davide

  6. #6
    Inizio del file XML:

    <?
    header("Content-type: text/xml");
    print '<?xml version="1.0" encoding="UTF-8"?>';
    print '<?xml-stylesheet type="text/xsl" href="file.xsl"?>';
    ?>

    Impostazione del tag filtro:

    <filtro><?=$_POST[param]?></filtro>

    Poi il resto lo fai tu.

    Non ho capito se <filtro> lo devi usare per filtrare dati: in questo caso se usi xsl:if devi prima assegnare a una variabile il valore di <filtro>.

  7. #7
    Eccellente!!!
    Grazie mille, hai risolto un problema che mi assillave da 20gg.
    Ora mi devo occupare della variabile nel XSL, ma mi pare di aver superato lo scoglio più grosso!
    Grazie ancora,
    Davide

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.