Applicare xsl in html

mgigio

Nuovo Utente
3 Mag 2007
11
0
0
Ciao a tutti, ho sentito che è possibile applicare lato client un foglio di stile xsl a un documento xml richiamato con XMLHttpRequest, ossia quando il docuemento xml è parte di una pagina xhtml. Mi sembra di aver capito che la tecnica consista nell'effettuare una seconda richiesta per il file xsl.

Ne sapete qualcosa?

In alternativa ho provato ad utilizzare un normale css, applicando le regole ai tag dell'xml, ma su ie non funziona, firefox non elabora tutti i tag, invece opera risponde regolarmente. Suggerimenti?

Grazie
 

mgigio

Nuovo Utente
3 Mag 2007
11
0
0
Eh si, me ne rendo conto. Sto cercando di risolvere questo problema per conto di un professore universitario e non è possibile modificare il progetto, perciò non ho alternative se non lavorare lato client e, fra parentesi, mi ha dato tempi strettissimi quindi sono alla disperata ricerca di qualsiasi aiuto. Grazie
 

mgigio

Nuovo Utente
3 Mag 2007
11
0
0
Grazie Lukeonweb, è stato il primo posto in cui ho cercato. Comunque qualche piccolo passo avanti l'ho fatto. Penso che potrebbe essere utile a tutti quello che ho trovato finora.

Ci sono alcune librerie che offrono la possibilità di trasformare xml con xsl: Freja, Ajaxlst e Sarissa

Freja consente con poche righe di ottenere il risultato voluto:

Codice:
var data = getModel('documento.xml');
var display = getView('foglio.xsl');
display.render(data, document.getElementById('elemento'));

Simile è anche Ajaxslt, creata da Google, ma sembra abbandonata in favore proprio di Freja e Sarissa:

Codice:
var xml = docXml; //ottenibile sia da una richiesta xmlhttp sia da una stringa con la funzione xmlParse(stringaXml)
var xslt = foglioXsl; // come per docXml
var html = xsltProcess(xml, xslt);
document.getElementById('elemento').innerHTML = html;

Il problema è che entrambe possono elaborare un solo documento xml, mentre nella mia pagina ne ho quattro a cui applicare un unico foglio di stile

Questo è il codice usando Sarissa:

Codice:
var xmlHttp;
var xmlHttpXsl;

// richiamo i file xml e xsl con XMLHttpRequest e li assegno a xmlDoc e xslDoc
if (window.XMLHttpRequest) {
  xmlHttp = new XMLHttpRequest();
  xmlHttpXsl = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  xmlHttpXsl=new ActiveXObject("Microsoft.XMLHTTP");  
}

xmlHttp.open("GET", urlXml, false);
xmlHttp.send(null);
xmlHttpXsl.open("GET",urlXsl, false);
xmlHttpXsl.send(null);

var xmlDoc = xmlHttp1.responseXML;
var xslDoc = xmlHttpXsl.responseXML;

// creo un processore xslt e lo configuro con il mio foglio di stile
var processor = new XSLTProcessor();
processor.importStylesheet(xslDoc);

// creo un serializzatore per convertire l'oggeto xml in stringa
var serializza = new XMLSerializer();

// eseguo la trasformazione e inserisco il risultato nella pagina html
var resultDocument = processor.transformToDocument(xmlDoc);
var html = serializza.serializeToString(resultDocument);
document.getElementById('elemento').innerHTML = html;

eseguendo tante richieste xmlhttp quanti sono i file xml da caricare, ottengo quello che voglio sia su firefox che su opera.

Ma su ie ho l'errore:

"The stylesheet does not contain a document element. The stylesheet may be empty, or it may not be a well-formed XML document."

generato dall'istruzione: this.template.stylesheet = converted;
nella funzione: XSLTProcessor.prototype.importStylesheet = function(xslDoc).

Il foglio xsl non l'ho creato io, ma con gli altri browser funziona perfettamente.

Purtroppo ie è troppo diffuso per poterlo ignorare. Potete aiutarmi? Grazie

P.S. forse qualcuno potrebbe verificare il comportamento su ie7, in tal caso gli sarei grato se mi comunicasse l'esito
 
Ultima modifica:

mgigio

Nuovo Utente
3 Mag 2007
11
0
0
Soluzione (parziale)

Ho trovato una soluzione alternativa per IE.

In realtà ho faticato molto perché con explorer ho problemi con la dichiarazione della dtd nei file xml, perlomeno in questo caso e ho perso due giorni per capirlo.

La soluzione è la più classica e banale, basta utilizzare il parser xml di microsoft, lasciando inalterato il codice per gli altri browser. Effettuando un semplice controllo per identificare IE è sufficiente eseguire il codice qui sotto (come dicevo io lavoro con quattro xml e un xsl)

Codice:
var xml1;
var xml2;
var xml3;
var xml4;
var xsl;

// creo gli oggetti dom e carico quattro file xml e un xsl
xml1 = new ActiveXObject("MSXML2.DOMDocument")
xml1.async = false
xml1.load(urlxml1)
xml2 = new ActiveXObject("MSXML2.DOMDocument")
xml2.async = false
xml2.load(urlxml2)
xml3 = new ActiveXObject("MSXML2.DOMDocument")
xml3.async = false
xml3.load(urlxml3)
xml4 = new ActiveXObject("MSXML2.DOMDocument")
xml4.async = false
xml4.load(urlxml4)
xsl = new ActiveXObject("MSXML2.DOMDocument")
xsl.async = false
xsl.load(urlxsl);

//effettuo la trasformazione col foglio di stile e assegno il risultato ad un tag della pagina html
document.getElementById(elemento1).innerHTML = (xml1.transformNode(xsl));
document.getElementById(elemento2).innerHTML = (xml2.transformNode(xsl));
document.getElementById(elemento3).innerHTML = (xml3.transformNode(xsl));
document.getElementById(elemento4).innerHTML = (xml4.transformNode(xsl));

Non è certo una soluzione elegante e non mi piace dover utilizzare due approcci così diversi a seconda del browser; inoltre bisogna verificare la versione di msxml.dll, nel caso di quelle più vecchie l'oggetto activex da creare è Microsoft.XMLDOM, ma in attesa di soluzioni migliori utilizzerò questa.

Immagino che i problemi con la doctype dipendano dal fatto che non ho la dtd a disposizione, ma non ne sono proprio convinto. Qualcuno ne sa di più?
 
Discussioni simili
Autore Titolo Forum Risposte Data
giannit [PHP] Applicare natsort usando un array PHP 12
ANDREA20 Creare carrello della spesa e applicare uno sconto E-Commerce 6
asevenx trasparenza da non applicare allo sfondo HTML e CSS 3
G Con Photoshop per applicare la Nitidezza (Filtro>Nitidezza) Photoshop 1
V Applicare un effetto di transizione tra due activity Sviluppo app per Android 1
M Applicare funzione php ad ogni elemto html Ajax 3
T applicare un effetto MOUSEOVER su uno SHORTCODE generato da plugin in WORDPRESS jQuery 6
T é possibile applicare HTML ad uno SHORTCODE? HTML e CSS 0
T applicare un effetto MOUSEOVER su THUMBNAILS generati da SHORTCODE WordPress 0
F Applicare uno stile css ad una sola parola HTML e CSS 5
asevenx applicare filtro anti spam PHP 6
M Livevalidation: applicare validazione solo se si sceglie una option di una select. Javascript 0
M applicare filigrana ad una miniatura PHP 8
W Applicare modello alle pagine con Dreamweaver mx Webdesign e Grafica 0
A applicare un texture di sfondo omogeneo HTML e CSS 3
A applicare logo.psd ad un filmato Webdesign e Grafica 1
A consigli su come applicare maschera costruta con photoshop Photoshop 3
N Applicare stili in asp Classic ASP 1
G Come applicare formattazione classe ad un tag già formattato? HTML e CSS 3
I Applicare "involucro" al testo? Flash 0
P problema xsl for-each XML 1
S XSL-Xpath problema con la trasformazione di un apice XML 0
JellyBelly Problema con xsl con html nel db XML 2
L Come carico in PHP un file xml e uno xsl? PHP 1
A Leggre piu xml con xsl con asp XML 17
A Pafinazione XML con XSL XML 7
G Pagina html in stringa PHP 2
E Sostituzione Elemento Html PHP 3
G Elementi HTML HTML e CSS 1
K Visualizzare del html responsive in una Webview Sviluppo app per Android 0
T Domanda valutazione html LinkedIn 2022 pt3 HTML e CSS 7
T Domanda valutazione html LinkedIn 2023 pt2 HTML e CSS 15
T Domanda valutazione html LinkedIn 2023 pt1 HTML e CSS 1
MarcoGrazia Salvataggio HTML in database PHP 2
K posizionare variabile da pagina html all'iframe. Javascript 1
peppe0703 Come Estrarre dati da db wordpress e richiamarli in html esterno HTML e CSS 0
L problema collegamento file css con html HTML e CSS 1
D Informazioni da XAMPP su HTML PHP 0
R Immagini html HTML e CSS 2
K File audio in html, chi mi può aiutare? HTML e CSS 0
K Aiuto con file audio in html HTML e CSS 1
Antonio67 Lanciare file shell bash da html HTML e CSS 2
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
G Codice html Javascript 1
M Collegamento tra form html e script php PHP 4
L Ricezione dei dati su file php da modulo html PHP 6
F Creare elementi html con javascript Javascript 3
G Appicazione HTML per inserimento dai in Database Access Microsoft HTML e CSS 0
W visualizzare solo file html e sottocartelle di una cartella PHP 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1

Discussioni simili