2

我的问题是以某种方式设置 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>
4

2 回答 2

1

您可以多次转换。只需在序列化之前再次调用 map:transform (使用不同的 xsl)。

您还可以使用 map:part/map:aggregate 将多个匹配器混合在一起,然后在它们上应用 map:transform(或 i:include 转换器)。

我真的不知道“未找到标签”是什么意思,所以也许我解决的问题是错误的。

--

如果您想查看调试输出(即基于 xml 生成的确切内容,您应该使用视图 - 在站点地图中声明它(请参阅:http ://cocoon.apache.org/2.0/userdocs/concepts/views .html ) 并为您的转换器添加一个标签。然后您可以通过调用 url?cocoon-view=YOURLABEL 来准确查看 xsl 正在使用哪些数据

于 2009-08-16T21:02:06.027 回答
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 转换器可能是您正在寻找的,而不是实现样式表来吞食它们。另一方面,如果 start.xml 的内容将永不改变,那么如上所述,<map:aggregate>会更有效率。

于 2010-08-23T22:14:46.700 回答