在jboss fuse的activeMQ中将xml的子记录拆分为单独的消息
这是一个JBossFuse项目 我有这样一个场景:一个文件有一个XML和多个子记录。我需要拆分子记录并使用XSLT将其转换为多个XML . 示例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>
皇帝讽刺剧
鲍勃·迪伦
美国
哥伦比亚
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)