使用XSL-baselink创建相对路径:SitemapBaseLink---cococoon,xslt
问题是,我有一个通用的“XHTML模板”,但相对位置不同,然后一些页面不支持css文件 我试着在网站地图(cocoon)上这样做使用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
在公共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>