如何从Camel路由传递xsl apply-templates中的参数

时间:2016-10-24 14:14:39

标签: java xslt xpath apache-camel

我想将xPath从Camel路由传递到XSLT转换,并在apply-templates select中使用它。根据Camel文档,我将参数设置为Header并在XSLT转换中声明它。我正在使用xslt 2.0

我可以看到xPath的te值,但我在apply-templates select中不起作用。有关详细信息,请参阅示例:

route.java

from("direct:myRoute")
.setHeader("myParam", constant("/myxPath/example") 
.to(XSLT_PATH);

xslt.xml

<xsl:param name="myParam"/>
<xsl:template match="/">
    <xsl:element name="DummyElement">
        <xsl:element name="ChildElement">
        </xsl:element>
        <xsl:value-of select="$myParam"/> - this will return provided xpath (/myxPath/example) 
        <xsl:apply-templates select="$myParam" - this doesn't work 
                             mode="mymode"/>
    </xsl:element>
</xsl:template>

我也用变量进行了测试,它也无法正常工作:

<xsl:param name="myParam"/>
<xsl:variable name="myVariable" select="$myParam"/> - change here
<xsl:template match="/">
    <xsl:element name="DummyElement">
        <xsl:element name="ChildElement">
        </xsl:element>
        <xsl:apply-templates select="$myVariable"  - change here
                             mode="mymode"/>
    </xsl:element>
</xsl:template>

但是当我在param中提供xpath时,select all正常工作:

<xsl:param name="myParam" select="/myxPath/example"/> -change here
<xsl:variable name="myVariable" select="$myParam"/>
<xsl:template match="/">
    <xsl:element name="DummyElement">
        <xsl:element name="ChildElement">
        </xsl:element>
        <xsl:apply-templates select="$myVariable" 
                             mode="mymode"/>
    </xsl:element>
</xsl:template>

我查看了已经存在的主题,但我没有得到解决方案。 提前致谢!

1 个答案:

答案 0 :(得分:1)

默认情况下,Camel消息中的所有标头都在XSLT中可用。在我的情况下,我需要在我的消息中添加新标题:

.setHeader("myParam", constant("/myxPath/example"))

我正确地在XSLT中获取myParam。然而根据'@Martin Honnen'和@Orabîg评论,Camel将这些参数作为字符串传递,所以在XSLT中我收到了:

<xsl:param name="myParam" select="'/myxPath/example'"/> - note additional single quotation mark 

在XSLT 2.0中,无法直接将xsl:param值从字符串转换为xpath。