Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache cocoon 在Apache Cocoon 2.2中生成XML进行处理时如何读取flowscript值_Apache Cocoon - Fatal编程技术网

Apache cocoon 在Apache Cocoon 2.2中生成XML进行处理时如何读取flowscript值

Apache cocoon 在Apache Cocoon 2.2中生成XML进行处理时如何读取flowscript值,apache-cocoon,Apache Cocoon,我有一个简单的flowscript函数,可以实现这一点: cocoon.sendPage("page/index", { username : "SomeName" } ); 在my sitemap.xmap中,我有以下配置: <map:pipeline internal-only="true"> <map:match pattern="page/*"> <map:generate src="xml/{1}.xml"/>

我有一个简单的flowscript函数,可以实现这一点:

cocoon.sendPage("page/index",
  {
    username : "SomeName"
  }
);
在my sitemap.xmap中,我有以下配置:

<map:pipeline internal-only="true">
  <map:match pattern="page/*">
    <map:generate src="xml/{1}.xml"/>
    <map:transform src="xslt/html.xslt"/>
    <map:serialize type="html"/>
  </map:match>
</map:pipeline>

我在html.xslt文件中使用xsl:stylesheet从page.xml-file读取值。它简单而直接(并按预期工作)


但是:我想读取page.xml-file中的flowscript值(此处为用户名),以便将其传递到html.xslt-file。这可以通过jx:template完成吗?(我发现的示例使用了该方法,但在Apache Cocoon 2.2中,仅在早期版本中效果不佳。)如果不是jx:template的解决方案:还有什么?

要从flowscript读取值,可以使用jx模板生成器。但与Cocoon 2.1和早期版本不同,您不应该在站点地图的map:generator部分中明确引用org.apache.Cocoon.generation.JXTemplateGenerator

以下是解决方案(使用ApacheCook 2.2和Maven 3.0.4),供将来参考:

1) 确保pom.xml与cocoon template impl有依赖关系(JXTemplateGenerator已移到此处)

3) 在sitemap.xmap中:生成XML文件时,确保它们具有type=“jx”


4) 在.jx.xml文件中:读取如下值

<?xml version="1.0" encoding="UTF-8"?>
<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
<valuesFromFlowscript>
  <!-- Select values from flowscript -->
  <username>${username}</username>
</valuesFromFlowscript>
</jx:template>
<xsl:value-of select="valuesFromFlowscript/username"/>

${username}
5) 在.xslt文件中,您可以像这样读取生成的值

<?xml version="1.0" encoding="UTF-8"?>
<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
<valuesFromFlowscript>
  <!-- Select values from flowscript -->
  <username>${username}</username>
</valuesFromFlowscript>
</jx:template>
<xsl:value-of select="valuesFromFlowscript/username"/>

<xsl:value-of select="valuesFromFlowscript/username"/>