覆盖XSL调用模板

时间:2014-02-27 23:44:14

标签: html css xml xslt

我有一个我需要使用的XSL样式表,因为它有很难重新创建的东西。我也无法编辑它。所以我使用<xsl:import>导入XSL样式表,然后我重写了一些模板。但有人让我难过:

<xsl:template match="mscript">
<html>
   <!-- head -->
   <head>

      <!-- ... other stuff not important ... -->

      <xsl:call-template name="stylesheet"/>
   </head>
   <body>
      <!-- ... more stuff ... -->

stylesheet模板粘贴在<style type='text/css'>...</style>标记中并且最有用,从这个愚蠢的废话开始:

<xsl:template name="stylesheet">
  <style type="text/css">
     html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,
     a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,
     small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,
     form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
     {margin:0;padding:0;border:0;outline:0;font-size:100%;
      vertical-align:baseline;background:transparent}    

哎呀!让我恶心。

我可以在我的根XSL文件中完全覆盖样式表,但我真正想做的就是取消这一个CSS规则。

有办法吗?这就是我想做的事情:

<xsl:template name="stylesheet">
   <xsl:call-template name="imported_stylesheet" />
   <style type="text/css">
      <!-- nullify the boneheaded nonsense -->
     h1,h2,h3,h4,h5,h6,p,blockquote,pre,
     a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,
     small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,
     form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
     {margin: default; padding:default;border:default;outline:default;font-size:default;
      vertical-align:default;background:default}    
   </style>
 </xsl:template>

default不是CSS功能,我不知道如何调用导入的样式表,因为当我覆盖stylesheet模板时,其先前的值会消失。

1 个答案:

答案 0 :(得分:2)

我相信CSS目前无法将样式重置为浏览器默认值(请参阅Reset CSS display property to default value

我可以想到一种非常'原始'的方式来做你想要实现的目标。假设样式表模板只返回一个样式元素,您可以将调用:template 命令包装在变量中,然后将其删除第一条规则。像这样的东西

<xsl:variable name="style">
   <xsl:call-template name="stylesheet"/>
</xsl:variable>
<style type="text/css">
   <xsl:value-of select="substring-after($style, '}')" />
</style>

这将在第一个之后发布CSS规则。

您确定无法编辑导入的样式表吗?难道你不能找到写它的人,并要求他们改变它以允许一个参数,指定你是否想要第一个规则?或者也许您可以只获取导入样式表的副本,并根据自己的目的进行更改....