Crea link a XML con il foglio di stile XSL

Ho un file XML e 3 file xsl che trasformano lo stesso xml. Voglio creare una home page, con tre pulsanti. Ogni pulsante reindirizzerà a una delle tre trasformazioni. Come posso creare un collegamento al file xml con una trasformazione spesific. Diciamo che ho: example.xml e t1.xsl, t2.xsl, t3.xsl e index.html con i pulsanti t1, t2, t3. Quando premo il pulsante t1 voglio ottenere il file XML trasformato da t1.xsl.

Dalla tua descrizione (“home page, …”) deduco che tutto ciò dovrebbe accadere sul web; in questo caso la risposta molto probabilmente riguarderà le regole per la configurazione del tuo server Web, quindi sarà una domanda su Apache, IIS, nginx o Jetty o qualsiasi altro server stia effettivamente servendo i tuoi documenti.

Ci sono molti modi per raggiungere l’objective; questi sono i primi tre o quattro che mi vengono in mente. Per concretezza supporrò che tu stia usando Apache (molte persone lo fanno), sappia come trovare e modificare i file di configurazione di Apache, e puoi adattare i riferimenti relativi per adattarli al layout della tua directory.

  • Supponendo che ciò che si desidera sia esattamente ciò che @Stefan Hegny presume tu non voglia.

    Si salvano tre copie del documento XML. Inizia quello denominato example.1.xml

     < ?xml-stylesheet href="t1.xsl" type="text/xsl"?>  ... 

    Inizia quello denominato example.2.xml

     < ?xml-stylesheet href="t2.xsl" type="text/xsl"?>  ... 

    Analogamente, example.3.xml inizia con un riferimento a t3.xsl .

    I tre pulsanti indicano questi tre documenti.

    Se example.xml sta ancora cambiando, vorrai automatizzare il processo di aggiornamento delle tre copie quasi identiche di esso ogni volta che il documento master cambia; Io uso Make e sed per tali compiti, me stesso.

  • Un altro modo per ottenere la stessa cosa, con una singola copia di example.xml

    Un altro modo per ottenere lo stesso effetto è mantenere una singola copia di example.xml , con un riferimento a t1.xsl (quindi sembra l’ example.1.xml descritto sopra), e dire al server

    • Ogni volta che un utente richiede l’URI example.1.xml , serve document example.xml .
    • Ogni volta che un utente richiede l’URI example.2.xml , eseguire il comando sed -es/t1.xsl/t2.xsl/ < example.xml e inviare il risultato (stdout) al client.
    • Ogni volta che un utente richiede l'URI example.3.xml , eseguire il comando sed -es/t1.xsl/t3.xsl/ < example.xml e inviare il risultato (stdout) al client.

    In Apache, utilizzo il modulo Riscrivi per redirect questi tre URI a uno script CGI che ispeziona l'URI con cui è stato chiamato ed esegue il comando appropriato.

    I tre pulsanti continuano a puntare ai tre URI example.1.xml , example.2.xml e example.3.xml .

  • Esecuzione del foglio di stile sul server

    Se i tre display devono funzionare anche con browser che non supportano XSLT, allora si desidera eseguire il foglio di stile sul server.

    Anche in questo caso, utilizzo Riscrivi per redirect gli URI a uno script CGI, ma invece di eseguire sed, lo script CGI esegue xsltproc o qualsiasi altro processore XSLT disponibile sul mio server.

  • Esecuzione del foglio di stile nel browser

    Un altro modo per gestire questo requisito è rendere index.xhtml un documento XForms, adatto per un processore che supporta la funzione di estensione transform () (ad esempio XSLTForms). Il documento example.xml viene chiamato da un elemento xf: instance e i tre pulsanti invocano i tre stylesheet su quell'istanza. Potrebbero aggiornare un'istanza ausiliaria oppure potrebbero semplicemente causare casi diversi in una xf:switch alla visualizzazione. (Se questo ha più senso per te ma hai bisogno di maggiori dettagli, fai una domanda con tag XForms, se non ha senso per te, allora probabilmente non conosci XForms e questo non è il percorso più semplice per raggiungere l'objective che descrivi .)

    Alcune persone usano JavaScript invece di XForm per questa attività, ma i browser variano molto nel modo in cui desiderano che venga richiamato il loro processore XSLT interno, quindi, a meno che non ti piaccia lavorare incoerenze nei browser in Javascript, potresti non voler andare in quel modo, .