Pregunta

Lo que estoy tratando de hacer es tener un documento XML, digamos http://example.org/ data.xml y muestran con una hoja de estilo XSL aplicado. (No puedo modificar el propio documento y añadir una directiva)

Así que hay un par de archivos XML de servicios públicos como esto:

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>

Para resumir: stylesheet.xsl está escrito para http://example.org/data.xml, el navegador se señaló wrapper.xml y el usuario debería ver el transformado http://example.org/ data.xml .

Este es uno de esos casos raros donde las cosas funcionan como se esperaba en el IE (y Chrome), pero no en Firefox.

Que yo sepa Firefox es compatible con las entidades XML externas, pero parece que son invisibles en el código XSL. He encontrado este artículo a partir de 2006, se describe este problema en Firefox 1.5 (I estoy usando 3.5.3)

¿Hay alguna solución para esto?

¿Fue útil?

Solución

Eso XML parece familiar ;)

Actualmente, Firefox no carga externa DTD y referencias de entidad, debido a la seguridad y la negación de las preocupaciones de servicio . Por ejemplo: http://en.wikipedia.org/wiki/Billion_laughs

Hay un Mozilla bug que describe las razones por las cuales y largo debate acerca de si debe o no hacer algo que es configurable: https: //bugzilla.mozilla. org / show_bug.cgi? id = 22942

No parece ser uno solución a las DTD de carga , pero yo supongo que probablemente no es una solución viable para usted .

Firefox se carga locales archivos DTD

si los coloca en este directorio para Windows:

C:\Program Files\Mozilla Firefox\res\dtd\...

El directorio para Linux:

/**mileage may vary**/MozillaFirefox/lib/res/dtd/

Una idea de moverse utilizando la referencia de entidad: Si usted puede controlar el contenido de la wrapper.xml, entonces se podría buscar a los contenidos de http://example.org /data.xml (lado del servidor) y el eco se destaca como el contenido completo del archivo de envoltura, con la adición de la instrucción de procesamiento de estilos (suponiendo que tiene algunas capacidades dinámicas del lado del servidor).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top