Will Firefox fazer XSLT em entidades externas?
Pergunta
O que eu estou tentando fazer é tirar um documento XML, digamos http://example.org/ data.xml e mostram que com uma folha de estilo XSL aplicada. (Eu não posso modificar o documento em si e adicionar uma directiva)
Portanto, há um par de arquivos XML utilitário como este:
wrapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wrapper [
<!ENTITY content SYSTEM "http://example.org/data.xml">
]>
<?xml-stylesheet type="text/xsl" href="unwrap.xsl" ?>
<wrapper>
&content;
</wrapper>
unwrap.xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="stylesheet.xsl"/>
<xsl:template match="/wrapper/node()[1]">
<xsl:apply-imports/>
</xsl:template>
</xsl:stylesheet>
Assim, para resumir: stylesheet.xsl é escrito para http://example.org/data.xml, o navegador é apontado wrapper.xml eo usuário deve ver o transformou http://example.org/ data.xml .
Este é um dos raros casos em que as coisas funcionam conforme o esperado no IE (e Chrome), mas não Firefox.
AFAIK Firefox suporta entidades XML externos, mas parece que eles são invisíveis em código XSL. Eu encontrei este artigo a partir de 2006, descreve este problema no Firefox 1.5 (I 'm usando 3.5.3)
Existe alguma solução para isso?
Solução
Isso XML parece familiarizado;)
Atualmente, o Firefox não carregar DTD do exterior e referências de entidade, por causa da segurança e de negação de preocupações de Serviços . Por exemplo: http://en.wikipedia.org/wiki/Billion_laughs
Há um Mozilla bug aberto descrevendo os motivos e longo debate sobre se deve ou não fazer algo que é configurável: https: //bugzilla.mozilla. org / show_bug.cgi? id = 22942
Não parece ser um solução para o carregamento DTDs , , mas eu estou supondo que provavelmente não é uma solução viável para você .
Firefox irá carregar Local arquivos DTD
Se você colocá-los neste diretório para Windows:
C:\Program Files\Mozilla Firefox\res\dtd\...
O diretório para Linux:
/**mileage may vary**/MozillaFirefox/lib/res/dtd/
Uma idéia se locomover utilizando a referência de entidade: Se você pode controlar o conteúdo da wrapper.xml, então você poderia buscar o conteúdo de http://example.org /data.xml (lado do servidor) e eco-lo como o conteúdo completo do arquivo de capa, com a adição da Instrução Stylesheet Processing (supondo que você tem algumas capacidades do lado do servidor dinâmico).