0

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

我试图在站点地图(茧)上这样做

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

在此先感谢您的帮助。

4

1 回答 1

0

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

$relative_path 如果您“匹配”位于 cocoon 应用程序根目录的 URL,“按文件夹”,逻辑上会产生一个空字符串,就像您在上下文中所做的那样<map:match pattern="index.html">…&lt;/map:match>

然而,

  • $relative_path如果您“匹配”一个模仿相对于根目录的单文件夹结构的 URL,将解析为../字符串,例如在类似于<map:match pattern="subfolder/index.html">…&lt;/map:match>或的上下文中<map:match pattern="*/index.html">…&lt;/map:match>
  • 它将../根据伪文件夹结构输出尽可能多的内容(如../../../..在上下文中<map:match pattern="foo/*/bar/*/index.html">…&lt;/map:match>

这应该是它。


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

  • 确保你的 CSS 有匹配器:如果你把它的 URL 放在浏览器的地址栏中,它是否被 Cocoon 成功地提供了服务?

  • 不要打错字:也许它只是在 SO 而不是在您的代码中,但您应该在 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" />
    
  • 正如Dimitre Novatchev所指出的,确保您<xsl:param name="relative_path"/>在 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>
    

.

于 2012-11-05T01:19:37.020 回答