xsl:import和xsl:include在样式表中不适用于Google Chrome

时间:2009-10-25 10:41:38

标签: google-chrome xslt

我正在构建一个使用xsl样式表的网站,我正在一个util样式表中构建一个有用函数的小库,其他表单导入

<xsl:import href="util" />

位于每张纸的顶部。这在Google Chrome中不起作用,因为它还不支持xsl:import。有人可以给我写一个样式表,我可以在服务器端运行,它将读取xsl:import行并在发送到客户端之前导入相关的样式表吗?

4 个答案:

答案 0 :(得分:5)

我会做类似下面的事情,它会在样式表服务器端到达Chrome之前将它们结合起来。第一步是因为xsl:import与使用导入的样式表替换所有地点不同。

  1. 将所有xsl:import替换为xsl:include(导入优先级不适用于xsl:include,因此您可能需要更改代码并使用优先级)
  2. 使用下面的服务器端样式表将其合并为一个,然后再提供
  3. 等几周(可能是几个月)。我已经为Chrome创建了一个修复程序,目前我正在与开发人员团队合作,将修复程序包含在构建中。
  4. <xsl:template match="node()">
        <xsl:copy>
           <xsl:copy-of select="@*"/>
           <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="xsl:include">
       <!-- you'll probably want to be a bit more restrictive here -->
       <xsl:copy-of select="document(@href)/xsl:stylesheet/*" />
    </xsl:template>
    

    更新:注意:Chrome中也会出现Chrome错误。

答案 1 :(得分:2)

您可以使用libxml2和libxslt模块在Python中执行此操作...不是为您完成所有工作,而是从以下内容开始:

import libxml2, libxslt

styledoc = libxml2.parseFile("page.xsl")
style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseFile("somefile.xml")
result = style.applyStylesheet(doc, None)

然后把东西送回去。

答案 2 :(得分:1)

在php中尝试这样的事情:

<?php
$sXml  = "<xml>";
$sXml .= "<testtag>hello tester</testtag>";
$sXml .= "</xml>";

# LOAD XML FILE
$XML = new DOMDocument();
$XML->loadXML( $sXml );

# START XSLT
$xslt = new XSLTProcessor();
$XSL = new DOMDocument();
$XSL->load( 'xsl/index.xsl', LIBXML_NOCDATA);
$xslt->importStylesheet( $XSL );
#PRINT
print $xslt->transformToXML( $XML );
?>

答案 3 :(得分:0)

http://www.w3.org/TR/xslt#literal-result-element显示了在编写XSL样式表时如何解决duplicate-xsl-namespace问题,该样式表将现有的XSL样式表转换为扩展了<xsl:import>的XSL样式表。

但请注意<xsl:import><xsl:include>之间的区别。