在jboss fuse的activeMQ中将xml的子记录拆分为单独的消息

在jboss fuse的activeMQ中将xml的子记录拆分为单独的消息,jboss,routes,apache-camel,redhat,jbossfuse,Jboss,Routes,Apache Camel,Redhat,Jbossfuse,这是一个JBossFuse项目 我有这样一个场景:一个文件有一个XML和多个子记录。我需要拆分子记录并使用XSLT将其转换为多个XML . 示例XML顺序(输入): 皇帝讽刺剧 鲍勃·迪伦 美国 哥伦比亚 10.90 1985 隐藏你的心 邦尼泰勒 英国 哥伦比亚唱片公司 9.90 1988 您应该更改此选项: <loop id="_loop1"> <xpath>count(/catalog/cd)</xpath>

这是一个JBossFuse项目

我有这样一个场景:一个文件有一个XML和多个子记录。我需要拆分子记录并使用XSLT将其转换为多个XML . 示例XML顺序(输入):


皇帝讽刺剧
鲍勃·迪伦
美国
哥伦比亚
10.90
1985
隐藏你的心
邦尼泰勒
英国
哥伦比亚唱片公司
9.90
1988

您应该更改此选项:

        <loop id="_loop1">
            <xpath>count(/catalog/cd)</xpath>
            <to id="_to1" uri="xslt:file:C:\Users\a638030\workspace\splitxml\data\order1.xsl"/>
            <log id="_log2" message="${body}"/>
        </loop>

计数(/catalog/cd)
为此:

        <split id="_split1">
            <xpath>/catalog/cd</xpath>
            <to id="_to1" uri="xslt:file:C:\Users\a638030\workspace\splitxml\data\order1.xsl"/>
            <log id="_log2" message="${body}"/>
        </split>

/目录/cd
执行此操作时,每个cd元素将有一次交换,因此必须相应地更改XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:param name="CamelSplitIndex" />

    <xsl:template match="/">
        <xsl:result-document href="file$CamelSplitIndex.xml">
            <document>
                <xsl:value-of select="."/>
            </document>
        </xsl:result-document>
    </xsl:template>
</xsl:stylesheet>


我建议你看一下

感谢你的帮助@noma17

(BLUEPRINT.XML)使用ActiveMQ的路由:


/目录/cd

Correct我这样做了(即使用拆分器),但它如何使用XSLT在ActiveMQ中为每个子节点生成单个文件作为消息。如果有必要让XSLT创建一个编号文件,则可能会出现错误,您可以使用
CamelSplitIndex
。我将编辑我的答案以给出一个例子。实际上,现在我读到了
结果文档
,它说
href
指定了文件将写入的位置。目的是将每个文档发送到ActiveMQ,还是您确实想要创建文件?最初我想到的是文件,但现在我想要在ActiveMQ Mesage中,因为我将只使用ActiveMQ发送xml。另外,为了便于学习,您可以给出文件方法alsoi尝试更新xslt,但它仍然给出了与以下相同的结果文档错误:-------------------------------------------------------------------------------------------------------------------------------------------javax.xml.transform.TransformerException:java.lang.RuntimeException:不支持的XSL元素“”com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:746)