Как скопировать внешний CSS и JavaScript в XSLT - PullRequest
12 голосов
/ 24 июня 2009

У меня есть XSL-преобразование, которое выводит HTML. В элементе head есть ссылка на файл CSS.

<link rel="stylesheet" type="text/css" href="css/styles.css"/>

Я хотел бы создать автономный результат HTML без внешних ссылок, и поэтому я хотел бы включить внешние ссылки CSS. Чтобы не допустить дублирования кода, я не хочу жестко кодировать стили в шаблон XSLT, поэтому я ищу некоторую команду XSLT для копирования содержимого файла CSS-файла. Я знаю, xsl:include или xsl:import не будут работать, так как они ожидают файлы XSLT. Также не

<xsl:copy-of select="document('css/styles.css')"/>

поскольку он ожидает что-то совместимое с XML.

У меня также есть некоторые объявления функций JavaScript, которые я также хотел бы скопировать.

Возможно ли это с чистым XSLT, или мне придется выполнить некоторую предварительную обработку файла XSLT (или постобработку файла HTML)?

Ответы [ 3 ]

12 голосов
/ 24 июня 2009

XSLT 2.0 предоставляет функцию unparsed-text () для чтения документов через URL, не являющиеся XML.

В XSLT 1.0, если вам не нужно слишком разбираться в CSS, вы можете использовать следующее, чтобы сделать CSS-файл XML-совместимым. И, к счастью, браузеры допускают комментарии HTML.

CSS

<!--/*--><root><![CDATA[<!--*/--> 
body
{
    margin: 0;
}
div > p
{
    background-color: yellow;
}
<!--/*-->]]></root><!--*/--> 

1008 * XSLT *

<style type="text/css">
    <xsl:value-of select="document('test.css')" disable-output-escaping="yes" />
</style>
0 голосов
/ 15 октября 2013

Используйте инструкцию обработки для переноса содержимого CSS:

<?xml version="1.0" encoding="utf-8"?>
  <root>
    <?wrapper html
      <html>
        <link rel="stylesheet" type="text/css" href="css/styles.css"/>
      </html>
    ?>
  </root>

Затем настройте существующий оператор xsl:copy-of select для его отображения:

 <xsl:copy-of select="document('css/styles.css')//processing-instruction()"/>
0 голосов
/ 24 июня 2009

Может быть, вы могли бы обмануть это, думая, что таблица стилей - это XML.

styles.css

/*
<?xml version="1.0" encoding="utf-8"?>
<style>
<![CDATA[
*/
... styles ...
/*
]]>
</style>
*/

Это взлом, но если нет другого способа, его может быть достаточно (при условии, что он вообще работает).

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