如何用Talend路由/Camel筛选XML指定值节点并保留为单条消息
在Talend路由中筛选XML节点并保留单条消息结果
方法一:使用tXMLMap组件
- 把
tXMLMap组件拖进你的Talend路由,将待处理的XML消息接入组件的输入端口 - 打开tXMLMap的映射编辑器,加载示例XML自动生成输入结构
- 搭建输出XML结构,和输入的
<root>完全一致,包含<occ>子节点 - 给
<occ>节点设置过滤规则:row1.type.equals("T1")(row1为输入端口默认命名,可根据实际调整) - 将符合条件的
<occ>节点映射到输出的<root>节点下,确保所有匹配节点批量保留,不会拆分成多条消息 - 把tXMLMap的输出端口连到后续组件,即可得到仅含T1类型
<occ>节点的完整XML
方法二:使用tXSLT组件(适配复杂XML转换场景)
- 在路由中添加
tXSLT组件,接入输入XML消息 - 编写如下XSLT样式表实现精准筛选:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/root"> <root> <!-- 仅复制type值为T1的occ节点 --> <xsl:copy-of select="occ[type='T1']"/> </root> </xsl:template> </xsl:stylesheet>
- 将该XSLT文件配置到tXSLT组件的样式表路径中
- 运行路由后,tXSLT会直接输出保留符合条件节点的完整XML消息,全程保持单条消息格式
验证结果
以你提供的输入XML为例,两种方法都会输出:
<root> <occ> <name>A</name> <type>T1</type> </occ> <occ> <name>B</name> <type>T1</type> </occ> </root>
内容的提问来源于stack exchange,提问作者Loko
相关产品推荐
相关产品推荐

