如何在XSLT中复制外部CSS和JavaScript

如何在XSLT中复制外部CSS和JavaScript,javascript,css,debugging,xslt,include,Javascript,Css,Debugging,Xslt,Include,我有一个输出HTML的XSL转换。在head元素中,我有一个CSS文件引用 <link rel="stylesheet" type="text/css" href="css/styles.css"/> 正如它所期望的那样,XML兼容 我还想复制一些JavaScript函数声明 对于纯XSLT,这是可能的,还是我必须对XSLT文件进行一些预处理(或对HTML文件进行后处理)?也许您可以欺骗它,让它认为样式表是XML styles.css /* <?xml version="1.

我有一个输出HTML的XSL转换。在
head
元素中,我有一个CSS文件引用

<link rel="stylesheet" type="text/css" href="css/styles.css"/>
正如它所期望的那样,XML兼容

我还想复制一些JavaScript函数声明


对于纯XSLT,这是可能的,还是我必须对XSLT文件进行一些预处理(或对HTML文件进行后处理)?

也许您可以欺骗它,让它认为样式表是XML

styles.css

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

这是一个黑客攻击,但如果没有其他方法,它可能就足够了(假设它能工作)。

XSLT 2.0提供了unparsed-text()函数,可以通过非XML的URL读取文档

在XSLT1.0中,如果不需要对CSS编写太多脚本,可以使用以下方法使CSS文件与XML兼容。幸运的是,浏览器可以容忍HTML注释

CSS


身体
{
保证金:0;
}
div>p
{
背景颜色:黄色;
}
]]> 
XSLT


使用处理指令包装CSS内容:

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

这将不起作用,因为CCS文本在任何情况下都不是有效的XML文本。例如,想想“div>p”选择器,或者字体声明中所有未替换的双引号。xsltproc不喜欢注释符号。它说:css/styles.css:1:parser error:Start-tag应该是'hmm。。我原以为在XML块前后都有文本节点仍然是合法的,毕竟,前后的空白是合法的。哦,好吧,这对我很有用。<>&字符存在问题。我最终得到了和]]>也适用于javascript。
<!--/*--><root><![CDATA[<!--*/--> 
body
{
    margin: 0;
}
div > p
{
    background-color: yellow;
}
<!--/*-->]]></root><!--*/--> 
<style type="text/css">
    <xsl:value-of select="document('test.css')" disable-output-escaping="yes" />
</style>
<?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="document('css/styles.css')//processing-instruction()"/>