【问题标题】:XSLT: Parent stylesheet imports child stylesheet, but child cannot see parent's variableXSLT:父样式表导入子样式表,但子样式表看不到父样式表
【发布时间】:2023-03-12 15:42:01
【问题描述】:

我有一个这样定义的父样式表:

<?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,那么一切都很好。

有人可以解释一下这里出了什么问题吗?查阅大量在线资源表明这种方法应该可行。

真诚的感谢。

【问题讨论】:

    标签: xslt variables import include


    【解决方案1】:

    根据http://www.w3.org/TR/xslt#import,任何“xsl:import 元素只允许作为顶级元素。xsl:import 元素子元素必须在 xsl:stylesheet 元素的所有其他元素子元素之前”,因此您的 sn-p 与 @ xsl:import 前面的 987654322@ 顺序错误,我希望 XSLT 处理器会引发错误消息。

    【讨论】:

    • 这实际上是我的粘贴错误 - 我的代码中的顺序是正确的。不过,我已经修改了我的 OP,ty。
    【解决方案2】:

    这个:

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

    只是一个普通的字符串。转换过程中不会发生任何变量替换。

    试试这个:

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

    【讨论】:

    • 谢谢mzjn,我明天上班先试试这个然后回复:)
    • 它没有,我不确定是因为我们如何使用转换(在 servlet 过滤器中,通过 javax 转换应用)还是因为它本身不正确。我确定您确定它是正确的(!),但我将在下周重新尝试进行一些项目更改后,因此打算回复。
    猜你喜欢
    • 2015-08-07
    • 2023-03-15
    • 2018-03-20
    • 1970-01-01
    • 2010-12-15
    • 2018-01-18
    • 1970-01-01
    • 2021-08-16
    • 2021-01-06
    相关资源
    最近更新 更多