我想将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>
我查看了已经存在的主题,但我没有得到解决方案。 提前致谢!
答案 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。