Будет ли Firefox выполнять XSLT для внешних объектов?

Я пытаюсь взять 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>

Итак, подведем итог: stylesheet.xsl написан для http://example.org/data.xml, браузер указывает на wrapper.xml, и пользователь должен увидеть преобразованный http://example.org/data.xml.

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

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

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


person Serguei    schedule 03.10.2009    source источник


Ответы (1)


Этот 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 (на стороне сервера) и вывести его как полное содержимое файла-оболочки с добавлением инструкции по обработке таблицы стилей. (при условии, что у вас есть динамические возможности на стороне сервера).

person Mads Hansen    schedule 03.10.2009
comment
Я также только что понял, что браузеры не будут получать XML-документы вне домена текущего документа. Поэтому, если wrapper.xml также не размещен на example.org, я не могу сказать ему получить example.org/data. xml. Но в этом случае я, вероятно, все равно мог бы изменить data.xml;) Здесь было намерение заставить клиента выполнять всю работу, сервер также будет использовать постоянную полосу пропускания для каждого запроса. Думаю, было бы неплохо, но, увы, в этом раунде главный козырь - безопасность. знак равно - person Serguei; 04.10.2009