Domanda

Sto cercando di utilizzare VBScript per eseguire una trasformazione XSLT su un oggetto XML.
Il file XSL che sto traducendo include la direttiva <xsl:import href="script.xsl"/>. Se uso l'URL assoluto (http://localhost/mysite/script.xsl), importa bene il foglio di stile; tuttavia, se utilizzo il percorso relativo (script.xsl) riporta " risorsa non trovata. " Devo essere in grado di eseguire il porting di questo tra un set di macchine, quindi devo essere in grado di utilizzare l'URI relativo. Qualche suggerimento?

Note:

  • Il file VBScript è in http://localhost/myscript.asp
  • il primo file XSL si trova in http://localhost/mysite/styles.xsl
  • il secondo file XSL si trova in mysite/script.xsl
  • l'utilizzo del relativo percorso myscript.asp inoltre non funziona

Addendum:

Grazie a tutti per le vostre risposte. Più scavo nel codice che lo sta facendo, più è strano. styles.xsl è una raccolta di codice piuttosto insolita. Quello che succede è <xml src=...> è incluso nell'output HTML di <=> come blocco XML (<=>) e quindi quel blocco viene caricato come foglio di stile, usando VBScript, sul lato client. Questo foglio di stile viene quindi utilizzato per trasformare un blocco XML recuperato tramite XMLHTTP. Quindi il problema è che il contesto di <=> è l'HTML sul lato client e non ha alcuna relazione con dove <=> è.

È stato utile?

Soluzione 6

Primo tentativo:

Ho provato a includere script.xsl come un altro blocco XML e a modificare la dichiarazione di importazione in tutti i modi che potevo immaginare, ma senza successo.

Soluzione finale:

Dato che l'URL assoluto per l'inclusione di script.xsl ha funzionato dall'inizio, la mia soluzione finale è stata quella di convertire style.xsl in style.asp con il doctype corretto. In questo file sono stato quindi in grado di recuperare il nome del server, il protocollo e il percorso ed echo nel posto giusto nella dichiarazione di importazione usando asp. Quindi, quando questo file è stato incluso in mysscript.asp, aveva l'URL assoluto corretto per il server. Questo è un po 'un trucco ma l'unico modo che ho trovato per risolvere questa situazione piuttosto contorta.

Altri suggerimenti

La directory corrente per xsl: import, xsl: include e la funzione document () è la directory che contiene la trasformazione che li utilizza. Quindi la direttiva xsl: import che hai detto che stai usando dovrebbe funzionare.

L'unica cosa che mi viene in mente potrebbe influire su questo: se si utilizza un percorso relativo, il file viene letto direttamente dal file system, mentre se si utilizza un URI assoluto, viene recuperato dal server Web. È possibile che ci siano alcune impostazioni di sicurezza che impediscono agli script di leggere i file in questa directory?

@Jon Penso che tu sia molto vicino ... ma non dovrebbe essere ...

<xsl:import href="/mysite/script.xsl"/>

... con una barra iniziale?

Lo affronterei eseguendo Sysinternals Process Monitor . Con questo strumento in esecuzione, puoi effettivamente vedere quali file tenta di aprire lo script, anche se non esistono.

È possibile che " directory corrente " ai fini del relativo percorso potrebbe essere la posizione della tua pagina ASP, non il tuo file XSL? In altre parole, se non l'hai già fatto, potresti provare:

<xsl:import href="mysite/script.xsl"/>

Mi capita spesso di riscontrare questo problema perché esiste un risolutore URI personalizzato utilizzato da una libreria che non riesco a vedere (o che non conosco perché non ho letto la documentazione pertinente.) Non ricordo se questo è spec o no, ma nel mondo Saxon / Java, il risolutore URI personalizzato ottiene il primo crack nel tentativo di risolvere gli URI per le istruzioni include / import e la funzione document (). Se non è in grado di risolvere l'URI, un risolutore URI predefinito lo prova, che di solito non manca mai quando l'URI è assoluto.

Quindi, probabilmente è qualcosa nel motore ASP che utilizza un risolutore URI basato sul contesto basato sul contesto dell'app.

Per caricare i file JS, Image o CSS è necessaria una variabile che definisce l'approvazione o webroot.

 <xsl:import href="{$approot}/somedir/script.xsl"/>

o se hai il valore in XML,

 <xsl:import href="{/root/@approot}/somedir/script.xsl"/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top