首页 > 解决方案 > 将参数传递给 xslt 作为 apache camel 中的节点

问题描述

是否可以将参数作为节点而不是字符串传递?

骆驼背景:

<setHeader headerName="document_as_node">
    <simple>${body}</simple>
</setHeader>

xslt:

<xsl:param name="document_as_node" />

body 是一个 xml 文档,但我将它作为字符串传递(当我尝试在 xpath 中使用此参数时出现错误)。如何将其作为节点传递或如何转换它?

标签: xsltapache-camel

解决方案


希望这个例子会有所帮助:

from("timer:foo?period=30s")
            .setBody(constant("<oldWrapTag><someTag>123</someTag></oldWrapTag>"))
            .convertBodyTo(org.w3c.dom.Document.class)
            .setBody(xpath("//someTag"))
            .setHeader("insert", simple("body"))
            .to("xslt:/xslt/test.xsl")
            .to("log:body?showBody=true")
    ;

xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="insert"/>

<xsl:template match="/">
    <xsl:element name="wrapTag">
        <xsl:copy-of select="$insert"/>
    </xsl:element>
</xsl:template>

输出:

2018-10-24 14:03:07,952 | INFO  | 10 - timer://foo | body                             | 247 - org.apache.camel.camel-core - 2.16.3 | Exchange[ExchangePattern: InOnly, BodyType: String, Body: <?xml version="1.0" encoding="UTF-8"?><wrapTag><someTag>123</someTag></wrapTag>]

推荐阅读