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

时间:2012-10-20 19:24:16

标签: xslt apache-cocoon

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

我试图在sitemap(cocoon)

上执行此操作
<map:match pattern="index.html">
    <map:generate src="data/courses-small.xml" type="file"/>
    <map:transform src="xsl/department_listing.xsl" type="xslt2" >
      <map:parameter name="relative_path" value="{baselink:SitemapBaseLink}"/>
    </map:transform>
    <map:serialize type="xhtml" />
  </map:match>

然后在常见的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没有产生任何值,变量是空的,我不知道如何修复它。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

$ relative_path不产生任何值是正常的

$relative_path 会在逻辑上生成空字符串,如果您“匹配”位于您的cocoon应用程序根目录的网址,“文件夹方式”就像你在<map:match pattern="index.html">…</map:match>

的背景下所做的那样

然而,

    如果您“匹配”模仿相对于根的单文件夹结构的网址,
  • $relative_path将解析为../字符串,例如类似于<map:match pattern="subfolder/index.html">…</map:match>或{{的上下文1}}
  • 根据伪文件夹结构(如<map:match pattern="*/index.html">…</map:match>上下文中的../
  • ,将根据需要输出尽可能多的../../../..

这应该是它。


我没有,那么你的设置可能还有其他的怪癖:

  • 确保您拥有CSS的匹配器:如果您将其网址放入浏览器的地址栏,Cocoon是否成功投放?

  • 不要输错;也许它只是在SO而不在你的代码中,但你应该在你的XSL中修复HTML:

    <map:match pattern="foo/*/bar/*/index.html">…</map:match>
  • 正如Dimitre Novatchev所指出,请确保您的<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:param name="relative_path"/>