我的问题是以某种方式设置Cocoon sitemap.xmap,它首先使用XSL转换XML文件,然后我可以将其用于我自己的转换。
我有以下文件:
start.xml:包含应用combine_start.xsl
组合在一起的文件的引用transform.xsl:这是我自己的XSL文件,我希望在使用combine_start.xsl(输出XML)进行转换时使用
由于start.xml是进程中所需的所有文件的索引,因此如果应用了任何XSL函数(未找到任何标记),则以下站点地图将不会显示任何结果。 我在网上搜索,但在应用另一个转换之前,我还没有找到一种方法来设置一个首先进行转换的管道。
希望我的问题太令人困惑,我感谢任何帮助。下面你会找到我试过的站点地图。
<?xml version="1.0"?>
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
<map:pipelines>
<map:pipeline>
<map:match pattern="*">
<map:generate src="start.xml"/>
<map:transform src="transform.xsl">
<map:parameter name="X" value="{request-param:X}"/>
<map:parameter name="Semester" value="{request-param:Semester}"/>
<map:parameter name="Name" value="{request-param:Name}"/>
<map:parameter name="XXX" value="{request-param:XXX}"/>
</map:transform>
<map:serialize/>
</map:match>
</map:pipeline>
</map:pipelines>
</map:sitemap>
答案 0 :(得分:1)
您可以多次变换。只需调用map:再次转换(使用不同的xsl) - 在序列化之前。
你也可以使用map:part / map:aggregate将多个匹配器混合在一起然后应用一个map:转换它们(或i:include变换器)。
我真的不知道你的意思是“找不到标签”,所以也许我正在解决这个问题。
-
如果你想看到调试输出(即,根据xml确切生成了什么,你应该使用视图 - 在站点地图中声明它(参见:http://cocoon.apache.org/2.0/userdocs/concepts/views.html)并为变换器添加标签。然后你可以通过调用url来确切地看到xsl正在使用什么数据?cocoon-view = YOURLABEL
答案 1 :(得分:1)
迈克尔似乎不再是一个用户,但无论如何我都会回答这个问题。基本上添加代码来说明Niko的答案,并且更具体一些。
将transform.xsl应用于combine_start.xsl [ObHalfLife2Reference]的输出的方法是:
<map:match pattern="*">
<map:generate src="start.xml"/>
<map:transform src="combine_start.xsl" />
<map:transform src="transform.xsl">
<map:parameter name="X" value="{request-param:X}"/>
<map:parameter name="Semester" value="{request-param:Semester}"/>
<map:parameter name="Name" value="{request-param:Name}"/>
<map:parameter name="XXX" value="{request-param:XXX}"/>
</map:transform>
<map:serialize/>
</map:match>
如果我理解你是说combine_start.xsl的输出是空的,那么这不是Cocoon问题而是XSLT问题......你的combine_start.xsl无法正常工作。
鉴于start.xml是要提供给transform.xsl的文件的索引,cinclude transformer可能就是您要查找的内容,而不是实现样式表来填充它们。另一方面,如果start.xml的内容永远不会改变,然后如上所述,<map:aggregate>
会更有效率。