Будет ли Firefox делать XSLT на внешних объектах? - PullRequest
1 голос
/ 03 октября 2009

Я пытаюсь сделать XML-документ, скажем, http://example.org/data.xml и показать его с примененной таблицей стилей XSL. (Я не могу изменить сам документ и добавить директиву)

Итак, есть пара служебных XML-файлов, таких как:

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>

Итак, подведем итог.

Это один из тех редких случаев, когда в IE (и Chrome) все работает как положено, но не в Firefox.

AFAIK Firefox поддерживает внешние сущности XML, но кажется, что они невидимы в коде XSL. Я нашел эту статью от 2006 года, она описывает эту проблему в Firefox 1.5 (я использую 3.5.3)

Есть ли обходной путь для этого?

1 Ответ

1 голос
/ 03 октября 2009

Этот XML выглядит знакомым ;)

В настоящее время FireFox не будет загружать внешние DTD и ссылки на сущности из-за проблем безопасности и отказа в обслуживании. Например: http://en.wikipedia.org/wiki/Billion_laughs

Существует открытая ошибка Mozilla , описывающая причины и длительные дебаты о том, стоит ли делать это что-то настраиваемым: https://bugzilla.mozilla.org/show_bug.cgi?id=22942

Похоже, что есть один обходной путь для загрузки DTD , , но я предполагаю, что, вероятно, это не жизнеспособное решение для вас .

Firefox загрузит локальные DTD файлы

если вы поместите их в этот каталог для Windows:

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

Каталог для Linux:

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

Одна идея обойти, используя ссылку на сущность: Если вы можете контролировать содержимое файла wrapper.xml, вы можете извлечь содержимое http://example.org/data.xml (на стороне сервера) и отобразить его как полное содержимое файла оболочки с добавлением инструкции по обработке таблицы стилей. (при условии, что у вас есть некоторые динамические возможности на стороне сервера).

...