2012-04-16 39 views
-1

我定义为这样的家长样式表:XSLT:父样式进口儿童样式,但孩子不能看到父母的变量

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:import href="external/webcommon/WebappTransform.xsl" /> 
    <xsl:variable name="webAppFinalName">rf</xsl:variable> 
</xsl:stylesheet>` 

导入的样式表WebappTransform.xsl包含一些内联CSS包括内某些模板:

@import url("/{$webAppFinalName}/external/webcommon/css/print.css"); 

转换发生在Java servlet过滤器中,我无法准确地看到输出HTML,但从最终结果中可以清楚地看到变量未被正确插入。

如果我手动插入变量并尝试使用完整的XSL,那么一切都很好。

有人能解释这里有什么问题吗?咨询一些在线资源表明这种方法应该可行。

真诚的感谢。

回答

1

http://www.w3.org/TR/xslt#import任何“XSL:import元素只允许作为一个顶级元素在xsl:import元素的孩子必须先于一个xsl的所有其他元素的孩子:stylesheet元素”,所以与xsl:variablexsl:import你的片段中错误的顺序,我希望XSLT处理器提出错误消息。

+0

这实际上是我的一个粘贴错误 - 订单是在我的代码是正确的。我已经修改了我的OP,但是。 – KomodoDave 2012-04-16 15:56:47

0

此:

@import url("/{$webAppFinalName}/external/webcommon/css/print.css"); 

只是一个简单的字符串。在转换过程中不会发生变量替换。

试试这个:

<xsl:value-of select="concat('@import url(&quot;/', $webAppFinalName, 
        '/external/webcommon/css/print.css&quot;);')"/> 
+0

谢谢mzjn,明天我会在第一件事情上试试这个,然后回复:) – KomodoDave 2012-04-16 21:44:38

+0

我的建议是否有效? – mzjn 2012-04-21 06:54:13

+0

它没有,我不确定是否因为我们如何使用转换(在servlet过滤器中,通过javax转换应用)或者它本身不正确。我相信你确定它是正确的(!),但是在下一次项目变更之后,我会在下周重新尝试这个,所以打算在那时做出回应。 – KomodoDave 2012-04-22 13:19:53