Pergunta

Eu estou tentando usar VBScript para fazer um XSLT transformar em um objeto XML.
O arquivo XSL Eu estou traduzindo inclui a directiva <xsl:import href="script.xsl"/>. Se eu usar o URL absoluta (http://localhost/mysite/script.xsl), importa a multa folha de estilo; no entanto, se eu usar o caminho relativo (script.xsl) ele relata "recurso não foi encontrado." Eu preciso ser capaz de porto esta entre um conjunto de máquinas, então eu preciso ser capaz de usar o URI relativo. Alguma sugestão?

Notas:

  • arquivo VBScript está em http://localhost/myscript.asp
  • primeiro arquivo XSL está em http://localhost/mysite/styles.xsl
  • segundo arquivo XSL está em http://localhost/mysite/script.xsl
  • usando o mysite/script.xsl caminho relativo também não trabalho

Adenda:

Obrigado a todos por suas respostas. Quanto mais eu cavar o código que está fazendo isso, o estranho é. myscript.asp é uma compilação bastante incomum de código. O que acontece é styles.xsl está incluído na saída HTML de myscript.asp como um pedaço XML (<xml src=...>) e, em seguida, esse pedaço é carregado como uma folha de estilo, usando VBScript, no lado do cliente. Este estilo é então utilizado para transformar um pedaço XML que é recuperado através de XMLHTTP. Portanto, o problema é o contexto do styles.xsl é o HTML no lado do cliente e não tem relação com onde script.xsl é.

Foi útil?

Solução 6

Primeira Tentativa:

Eu tentei incluindo script.xsl como outro pedaço xml e alterando a declaração de importação em todos os sentidos que eu poderia imaginar, mas sem sucesso.

solução final:

Uma vez que a url absoluta para includeing script.xsl trabalhou desde o início, a minha solução final foi para converter style.xsl para style.asp com o doctype correto. Neste arquivo Eu era então capaz de recuperar o nome do servidor, protocolo e caminho e eco-los no lugar certo na declaração de importação usando asp. Então, quando este arquivo foi incluído no mysscript.asp, ele teve a url absoluta correto para o servidor. Este é um bocado de um hack, mas a única maneira que eu encontrei para resolver esta situação bastante complicada.

Outras dicas

O diretório atual para xsl: import, xsl: incluir, e a função de documento () é o diretório que contém o que os usos transformá-las. Assim, o xsl:. Directiva de importação que você disse que você está usando deve estar trabalhando

A única coisa que eu posso pensar que poderia afetar isto: se você usar um caminho relativo, sendo a leitura do arquivo diretamente do sistema de arquivos, enquanto se você usar um URI absoluto, está sendo recuperado do servidor web. É possível que haja alguma configuração de segurança que está impedindo scripts a partir de leitura de arquivos neste diretório?

@ Jon Eu acho que você está muito perto ... mas não deveria ser ...

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

... com uma barra inicial?

Gostaria de resolver isso executando monitor Sysinternals Process . Com esta ferramenta em execução, você pode realmente ver o que seus arquivos de tentativas script para abrir, mesmo se eles não existem.

É possível que o "diretório atual" para fins do caminho relativo pode ser o local de sua página ASP, não seu arquivo XSL? Em outras palavras, se você não tiver, você pode tentar:

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

Muitas vezes eu executar para esse problema porque há um costume URI resolvedor a ser utilizado por uma biblioteca que não consigo ver (ou não sei sobre porque eu não li a documentação pertinente.) Eu não me lembro se esta é especificação ou não, mas no mundo do Saxon / java, o costume URI resolvedor recebe primeira rachadura em tentar resolver URI para incluir / instruções de importação, bem como a função de documento (). Se não conseguir resolver o URI, um URI resolvedor padrão dá-lhe uma tentativa, que geralmente nunca perde quando o então URI é absoluta.

Então, é provavelmente algo no motor de ASP que está usando um impulsionada contexto URI resolver com base no contexto do aplicativo.

Você precisa de uma variável que define o AppRoot, ou webroot quando a carga JS, arquivos de imagem ou CSS.

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

ou se você tiver o valor no XML,

 <xsl:import href="{/root/@approot}/somedir/script.xsl"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top