Использование xsl: include с AJAX / XSLT - PullRequest
0 голосов
/ 16 сентября 2009

Я использую Javascript для загрузки XML и преобразования его в XSLT. Все работает, пока я не попытаюсь использовать <xsl:include>. Можно ли таким образом включать файлы?

Вот соответствующий код XSLT.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
...
<xsl:include href="another_xslt.xsl"/>
</xsl:stylesheet>

А вот код JavaScript:

var xmlRequest = new XMLHttpRequest();
xmlRequest.open("GET", "data.xml", false);
xmlRequest.send(null);

var xsltRequest = new XMLHttpRequest();
xsltRequest.open("GET", "https://hostname.com/directory/xslt/transform.xsl", false);
xsltRequest.send(null);

var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsltRequest.responseXML);
return xsltProcessor.transformToDocument(xmlRequest.responseXML);

Я использую Firefox 3.5, и сценарий завершается ошибкой в ​​строке xsltProcessor.importStylesheet без каких-либо сообщений об ошибках.

Обновление:

Tamper Data показывает запрос на another_xslt.xsl, но в родительском каталоге, поэтому он получает 404.

Все файлы xslt находятся в https://hostname.edu/directory/xslt/, но Firefox запрашивает http://hostname.edu/directory/another_xslt.xsl. Почему он запрашивает файл из родительского каталога и без https? HTML-файл находится в / directory / admin / edit

Использование полного URL-адреса устраняет проблему, но мне нужно, чтобы он работал на сервере, поэтому я бы предпочел использовать относительный путь, как сейчас.

1 Ответ

2 голосов
/ 16 сентября 2009

Возможно включить xsl с помощью importStylesheet (), чтобы это не было проблемой.

У меня на самом деле нет ответа, но, возможно, есть несколько указателей для проверки:

Есть ли у вас бесконечная рекурсия включения, где файл x включает в себя y, который в свою очередь включает x?

Убедитесь, что за xsl: include не следует xsl: import.

Если вы используете что-то вроде Tamper Data, вы видите, что FireFox запрашивает 'another_xslt.xsl'?

Долгосрочная догадка: я никогда не видел xsl: include, который не был определен прямо под xsl: stylesheet перед любыми объявлениями xsl: template, возможно, может помочь перемещение этого xsl: include в начало (помните, что xsl: import должно идти первый).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...