caminho relativo para XSL: importação ou XSL: incluir
-
02-07-2019 - |
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
é.
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"/>