使用XSL-baselink创建相对路径:SitemapBaseLink---cococoon,xslt

使用XSL-baselink创建相对路径:SitemapBaseLink---cococoon,xslt,xslt,apache-cocoon,Xslt,Apache Cocoon,问题是,我有一个通用的“XHTML模板”,但相对位置不同,然后一些页面不支持css文件 我试着在网站地图(cocoon)上这样做 在公共xsl的顶部,我有一个 <xsl:param name="relative_path"/> 稍后我将使用如下参数: <xsl:template match="/"> <html> <head> <title><xsl

问题是,我有一个通用的“XHTML模板”,但相对位置不同,然后一些页面不支持css文件

我试着在网站地图(cocoon)上这样做


在公共xsl的顶部,我有一个

<xsl:param name="relative_path"/>

稍后我将使用如下参数:

<xsl:template match="/">
        <html>
            <head>
                <title><xsl:value-of select="$displaytitle"/></title>
                 <link rel="stylesheet" type="text/css" href="http://localhost:8080/cocoon/assignment2/css/style.css" /> 
                <link rel="stylesheet" type="{$relative_path}css/style.css" />
            </head>

问题是$relative_path没有生成任何值,变量为空,我不知道如何修复它

提前感谢您的帮助。

$relative\u路径不产生任何价值在这里是正常的
$relative_path
如果您“匹配”cocoon应用程序根目录下的URL,则在逻辑上会生成一个空字符串,就像您在
的上下文中所做的那样

但是,

  • $relative\u path
    将解析为
    。/
    字符串,如果您“匹配”一个URL,该URL模仿相对于根目录的一个文件夹结构,就像在类似于
    ..
    ..
    的上下文中一样
  • 它将根据需要根据伪文件夹结构输出尽可能多的
    。/
    (如
    。/../../../../../../../code>的上下文中的
应该是这样


如果没有,那么您的设置中可能会有其他怪癖:

  • 确保你的CSS有匹配器:如果你把它的URL放在浏览器的地址栏上,Cocoon会成功地为它服务吗

  • 不要输入错误:也许它只是开着,而不是在代码中,但您应该在XSL中修复HTML:

    <link rel="stylesheet" type="{$relative_path}css/style.css" />
    <!-- should read: -->
    <link rel="stylesheet" type="text/css" href="{$relative_path}css/style.css" />
    
    
    
  • 正如所指出的,确保您的
    在XSL中处于正确的位置,如:

    <xsl:stylesheet version="1.0" 
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:param name="relative_path" />
      <xsl:template match="/">
        …
      </xsl:template>
    </xsl:stylesheet>
    

.

您确定
xsl:param
是在全局级别指定的(而不是在任何模板byt中,只是作为
xsl:stylesheet
的子级)?如果不是,这就是报告问题的原因。
相对路径
为空在
的上下文中并不是那么错误(尽管可以预期
{baselink:SitemapBaseLink}
输出
)。你能(1)告诉我们在其他匹配器(如
)上发生了什么,(2)确认Cocoon实际上是从根相对路径
/css/style.css
提供
样式.css
文件的,因为这是我对你意图的理解,并且(3)可以尝试这样更改你的XSLT:
。最后,但可能不是最不重要的,您的
xslt2
类型别名使用的确切转换器是什么?
<xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="relative_path" />
  <xsl:template match="/">
    …
  </xsl:template>
</xsl:stylesheet>