Condividi:        

XML, XSL, PHP

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

XML, XSL, PHP

Postdi LALIFA » 26/11/05 12:57

ciao a tutti!!
mi serve disperatamente :cry: un aiuto...giovedì devo consegnare un progetto per un esame e il prof ci ha spiegato questi linguaggi in 6 ore :undecided: !!!
Ho consultato diversi manuali ma non sono riuscita a trovare soluzione!
Premetto che siamo vincolati all'uso di php, xml e html (nulla in più).
Il mio file xml (una parte)è il seguente:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" ?>
<registro_prenotazioni>

<prenotazione_privati>
<cognome>Micheli</cognome>
<nome>Stefano</nome>
<nota></nota>
<nazionalita>Italiana</nazionalita>
<indirizzo>Via Napoli</indirizzo>
<civico>45</civico>
<cap>38100</cap>
<citta>Trento</citta>
<provincia>(Tn)</provincia>
<telefono>0461992368</telefono>
<tesserato>si</tesserato><consenso>si</consenso>
<e_mail>rossi@hotmail.com</e_mail>
<data_prenotazione>
<giorno_p>12</giorno_p>
<mese_p>07</mese_p>
<anno_p>2005</anno_p>
</data_prenotazione>
<data_arrivo>
<giorno_a>17</giorno_a>
<mese_a>07</mese_a>
<anno_a>2005</anno_a>
</data_arrivo>
<provenienza>Rifugio Pedrotti</provenienza>
<motivo>Escursionismo</motivo>
<numero_persone>2</numero_persone>
<numero_notti>1</numero_notti>
<numero_stanza>1</numero_stanza>
</prenotazione_privati>

<prenotazione_privati>
<cognome>Hans</cognome>
<nome>Peter</nome>
<nota>guida</nota>
<nazionalita>Tedesca</nazionalita>
<indirizzo>Marien Platz</indirizzo>
<civico>165/A</civico>
<cap>0067</cap>
<citta>Monaco</citta>
<provincia></provincia>
<telefono>0300303030303</telefono>
<tesserato>si</tesserato><consenso>no</consenso>
<e_mail>hans@dav.de</e_mail>
<data_prenotazione>
<giorno_p>12</giorno_p>
<mese_p>06</mese_p>
<anno_p>2004</anno_p>
</data_prenotazione>
<data_arrivo>
<giorno_a>17</giorno_a>
<mese_a>08</mese_a>
<anno_a>2004</anno_a>
</data_arrivo>
<provenienza>Rifugio Alimonta</provenienza>
<motivo>Arrampicata</motivo>
<numero_persone>2</numero_persone>
<numero_notti>3</numero_notti>
<numero_stanza>3</numero_stanza>
</prenotazione_privati>

<prenotazione_gruppi>
<nome_gruppo>Summit</nome_gruppo>
<nota>arriva dopo le ore 18</nota>
<nazionalita>Tedesca</nazionalita>
<indirizzo>Via Trento</indirizzo>
<civico>15</civico>
<cap>36783</cap>
<citta>Innsbruck</citta>
<provincia>(Tn)</provincia>
<telefono>0463432568</telefono>
<e_mail>summit@hotmail.com</e_mail>
<data_prenotazione>
<giorno_p>12</giorno_p>
<mese_p>07</mese_p>
<anno_p>2005</anno_p>
</data_prenotazione>
<data_arrivo>
<giorno_a>17</giorno_a>
<mese_a>07</mese_a>
<anno_a>2005</anno_a>
</data_arrivo>
<provenienza>Rifugio Pedrotti</provenienza>
<motivo>Ferrate</motivo>
<numero_persone>8</numero_persone>
<numero_notti>2</numero_notti>
<stanze>
<prima_stanza>
<numero_prima_stanza>8</numero_prima_stanza>
<pp_prima_stanza>3</pp_prima_stanza>
</prima_stanza>
<seconda_stanza>
<numero_seconda_stanza>2</numero_seconda_stanza>
<pp_seconda_stanza>4</pp_seconda_stanza>
</seconda_stanza>
<terza_stanza>
<numero_terza_stanza>camerone</numero_terza_stanza>
<pp_terza_stanza>1</pp_terza_stanza>
</terza_stanza>
<quarta_stanza>
<numero_quarta_stanza></numero_quarta_stanza>
<pp_quarta_stanza></pp_quarta_stanza>
</quarta_stanza>
<quinta_stanza>
<numero_quinta_stanza></numero_quinta_stanza>
<pp_quinta_stanza></pp_quinta_stanza>
</quinta_stanza>
</stanze>
</prenotazione_gruppi>

</registro_prenotazioni>

I 2 problemi più grossi che ho sono:

1) devo creare un foglio di stile xsl dinamico (ossia in php), in cui confluisce la data inserita dall'utente in apposito form (e fin qui non ci sono problemi; in pratica appaiono solo le preontazioni di una certa giornata)...problema: come filtrare per data in un foglio di stile??????ho fatto numerose prove con l'anno...usando la funzione if, choose.. non mi da errore ma è come se non capisse l'anno; ho provato altri criteri di filtro e funzionano..ma con l'anno niente!!
il mio foglio di stile è il seguente:

<?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:template match="/">
<html>
<head>
<title>Prenotazioni</title>
</head>
<body>
<center><h1>Lista prenotazioni</h1></center>
<table border="2" cellpadding="0" cellspacing="2">
<tbody>
<tr>
<th>ID</th><th>Data prenot.</th><th>Soggetto<br>gruppo</br></th><th>Nazion.</th><th>Indirizzo</th><th>Telefono</th><th>UIAA</th>
<th>E-mail</th><th>Data di arrivo</th><th>Provenienza</th><th>PP</th><th>Notti</th><th>Stanza Nr. (PP)</th><th>Nota</th>
</tr>

<xsl:apply-templates select="registro_prenotazioni/prenotazione_privati"/>
<xsl:apply-templates select="registro_prenotazioni/prenotazione_gruppi"/>
</tbody>
</table>

</body>
</html>




</xsl:template>
<xsl:template match="registro_prenotazioni/prenotazione_privati">
<tr>
<td align="center"><xsl:number value="position()"/></td><td><xsl:value-of select="./data_prenotazione/giorno_p"/><xsl:text>-</xsl:text><xsl:value-of select="./data_prenotazione/mese_p"/><xsl:text>-</xsl:text><xsl:value-of select="./data_prenotazione/anno_p"/></td><td><b><xsl:value-of select="./cognome"/><br></br><xsl:value-of select="./nome"/></b></td>
<td><xsl:value-of select="./nazionalita"/>
</td><td><xsl:value-of select="./indirizzo"/><xsl:text> </xsl:text><xsl:value-of select="./civico"/><xsl:text>, </xsl:text><br></br><xsl:value-of select="./cap"/><xsl:text> </xsl:text><xsl:value-of select="./citta"/><xsl:text> </xsl:text><xsl:value-of select="./provincia"/></td>
<td><xsl:value-of select="./telefono"/></td><td align="center"><xsl:value-of select="./tesserato"/></td><td><xsl:value-of select="./e_mail"/></td>
<td><xsl:value-of select="./data_arrivo/giorno_a"/><xsl:text>-</xsl:text><xsl:value-of select="./data_arrivo/mese_a"/><xsl:text>-</xsl:text><xsl:value-of select="./data_arrivo/anno_a"/>

</td><td><xsl:value-of select="./provenienza"/></td><td align="center"><xsl:value-of select="./numero_persone"/></td><td align="center"><xsl:value-of select="./numero_notti"/></td>
<td align="center"><xsl:value-of select="./numero_stanza"/><xsl:text> (</xsl:text><xsl:value-of select="./numero_persone"/><xsl:text>)</xsl:text></td>
<td><xsl:value-of select="./nota"/></td></tr>
</xsl:template>

<xsl:template match="registro_prenotazioni/prenotazione_gruppi">
<tr bgcolor="lightskyblue">
<td align="center"><xsl:number value="position()"/></td><td><xsl:value-of select="./data_prenotazione/giorno_p"/><xsl:text>-</xsl:text><xsl:value-of select="./data_prenotazione/mese_p"/><xsl:text>-</xsl:text><xsl:value-of select="./data_prenotazione/anno_p"/></td>
<td><b><xsl:value-of select="./nome_gruppo"/></b></td>
<td><xsl:value-of select="./nazionalita"/>
</td><td><xsl:value-of select="./indirizzo"/><xsl:text> </xsl:text><xsl:value-of select="./civico"/><xsl:text>, </xsl:text><br></br><xsl:value-of select="./cap"/><xsl:text> </xsl:text><xsl:value-of select="./citta"/><xsl:text> </xsl:text><xsl:value-of select="./provincia"/></td>
<td><xsl:value-of select="./telefono"/></td><td></td><td><xsl:value-of select="./e_mail"/></td>
<td><xsl:value-of select="./data_arrivo/giorno_a"/><xsl:text>-</xsl:text><xsl:value-of select="./data_arrivo/mese_a"/><xsl:text>-</xsl:text><xsl:value-of select="./data_arrivo/anno_a"/>

</td><td><xsl:value-of select="./provenienza"/></td><td align="center"><xsl:value-of select="./numero_persone"/></td><td align="center"><xsl:value-of select="./numero_notti"/></td>
<td align="center"><xsl:value-of select="./stanze/prima_stanza/numero_prima_stanza"/><xsl:text> (</xsl:text>
<xsl:value-of select="./stanze/prima_stanza/pp_prima_stanza"/><xsl:text>); </xsl:text>
<xsl:value-of select="./stanze/seconda_stanza/numero_seconda_stanza"/><xsl:text> (</xsl:text>
<xsl:value-of select="./stanze/seconda_stanza/pp_seconda_stanza"/><xsl:text>); </xsl:text>
<xsl:value-of select="./stanze/terza_stanza/numero_terza_stanza"/><xsl:text> (</xsl:text>
<xsl:value-of select="./stanze/terza_stanza/pp_terza_stanza"/><xsl:text>); </xsl:text>
<xsl:value-of select="./stanze/quarta_stanza/numero_quarta_stanza"/><xsl:text> (</xsl:text>
<xsl:value-of select="./stanze/quarta_stanza/pp_quarta_stanza"/><xsl:text>); </xsl:text>
<xsl:value-of select="./stanze/quinta_stanza/numero_quinta_stanza"/><xsl:text> (</xsl:text>
<xsl:value-of select="./stanze/quinta_stanza/pp_quinta_stanza"/><xsl:text>); </xsl:text>
</td>
<td><xsl:value-of select="./nota"/></td></tr>
</xsl:template>
</xsl:stylesheet>

2) questo, secondario, perchè ormai ci ho rinunciato...(qualcuno ha uno script php per modificare parte di un file xml? mi spiego: con un form carico i dati della prenotazione, la visualizzo nell'elenco delle prenotazioni e a fianco cliccando su un link mi si apre un form già compilato con i dati della prenotazione, li modifico, salvo e si sovrascrive alla vecchia prenotazione)


:oops: sono conscia che le domande che ho fatto sono belle pesanti...se c'è qualcuno che mastica bene questi linguaggi ed è disposto ad aiutarmi (soprattutto per quanto riguarda il primo quesito)....grazie!!
LALIFA
Utente Junior
 
Post: 51
Iscritto il: 10/03/05 18:57
Località: Trento

Sponsor
 

Postdi andrea_Hockey » 28/12/05 17:43

se la data che viene inserita tramite form viene messa nel file xml allora puoi fare un sorting con il foglio di stile, in questo modo:

<xsl:sort select="data" order="descending"/>

altrimenti devi prendere la data e metterla in una variabile locale del blocco di codice PHP e effettuare un controllo in base al tipo di sorting che vuoi fare, cioè se vuoi che le date inserite siano maggiori di una certa data puoi fare un controllo di tipo "if" e confronti la il contenuto della variabile della data inserita dall'utente con la data del giorno o una specifica, io ho fatto in questo modo, ma in questo caso interrogo un database, ad ogni modo è fattibile anche con l'xml.

$today = date("Y-m-d");
$over = date("2005-11-09");
$result = mysql_query("select * from impegni where data<='$today' AND data>'$over' order by data desc limit 1");

spero di esserti stato utile e soprattutto chiaro :?:

devo creare un foglio di stile xsl dinamico (ossia in php)
non ho capito come hai strutturato la pagina .php e sarebbe più semplice aiutarti se potessi vederlo.
andrea_Hockey
Newbie
 
Post: 4
Iscritto il: 28/12/05 17:20
Località: Crema

Postdi LALIFA » 28/12/05 17:58

CIAO!
grazie mille del tuo aiuto..ho risolto spezzando la data in 3 cifre e facendo 3 sort annidati...ho consegnato il progetto il 2 dicembre e ho preso 30...
buon natale e buon anno!
LALIFA
Utente Junior
 
Post: 51
Iscritto il: 10/03/05 18:57
Località: Trento

Postdi andrea_Hockey » 28/12/05 18:03

Ottimo anche io ho appena finito un progetto molto simile solo che anzichè usare PHP ho usato JSP.
Posso farti io una domanda?
E' possibile con PHP fare una transform?

In JSP incudevo due file (uno .xml l'altro .xsl) nella pagina e facevo la transform sulle due variabili associate ai file inclusi.

Per PHP è possibile un'operazione simile?

Grazie e Buon Anno :)
andrea_Hockey
Newbie
 
Post: 4
Iscritto il: 28/12/05 17:20
Località: Crema

Postdi LALIFA » 28/12/05 18:07

non capisco cosa intendi per transform...se applicare il file xsl a quello xml..ti posso dare il comando che ci ha dato il prof...con me ha funzionato
LALIFA
Utente Junior
 
Post: 51
Iscritto il: 10/03/05 18:57
Località: Trento

Postdi andrea_Hockey » 28/12/05 18:14

in JSP per vedere il risultato del file xml e xsl faccio così:

Codice: Seleziona tutto
 <table border="0" align="center" cellpadding="0" cellspacing="0" width="100%">
   <c:import var="xmlSource" url="xml/classifica.xml"/>
                <c:import var="xsltSource" url="xsl/classifica.xsl"/>
               
                <x:transform xml="${xmlSource}" xslt="${xsltSource}" />
</table>


ma non posso fare allo stesso modo in PHP perchè mi occorrono delle librerie a cui fanno riferimento "c:" e "x:"

tu come hai fatto ad applicare il foglio di stile alla pagina PHP?

grazie :)
andrea_Hockey
Newbie
 
Post: 4
Iscritto il: 28/12/05 17:20
Località: Crema

Postdi LALIFA » 28/12/05 18:24

non conosco nulla di jsp
con php ho creato dei fogli di stile xsl che si aggiornavano con i dati insriti in un form dall'utente.

Codice: Seleziona tutto
$fileName = "cercaclienteprivato.xsl";
$fileStream = fopen($fileName, "w");
fwrite($fileStream,$testo);
fclose($fileStream);
header("Location:cercapr.php");

dopo aver scritto, chiuso e salvato il file xsl creato, con un header ho lanciato un'altro script php che con un comando java applica il foglio di stile appena creato al file xml.

Codice: Seleziona tutto
<HTML>
<HEAD>

<TITLE>
</TITLE>
</HEAD>

<BODY>
<?php system("/usr/lib/java/bin/java -classpath /usr/lib/saxon/saxon.jar com.icl.saxon.StyleSheet prenotazioni.xml cercaclienteprivato.xsl"); ?>

</BODY>
</HTML> 
[/code]
LALIFA
Utente Junior
 
Post: 51
Iscritto il: 10/03/05 18:57
Località: Trento

Postdi andrea_Hockey » 28/12/05 18:37

<?php system("/usr/lib/java/bin/java -classpath /usr/lib/saxon/saxon.jar com.icl.saxon.StyleSheet prenotazioni.xml cercaclienteprivato.xsl"); ?>


Corrisponde alla transform di JSP.
Era proprio quello che volevo sapere!!!

Grazie Mille :) :) :)
andrea_Hockey
Newbie
 
Post: 4
Iscritto il: 28/12/05 17:20
Località: Crema

Postdi LALIFA » 28/12/05 18:39

DI NIENTE! ;)
LALIFA
Utente Junior
 
Post: 51
Iscritto il: 10/03/05 18:57
Località: Trento


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 21 ospiti