需利用处理器、连接、处理器组及拖放式画布构建无代码XML处理流程:一、用GetFile读取XML;二、用EvaluateXPath解析字段;三、用ConvertRecord转JSON;四、用RouteOnAttribute按状态路由;五、用PutFile或PutDatabaseRecord输出。

如果您希望在Apache NiFi中构建一个无需编写代码、通过图形界面完成的XML文件处理流程,则需利用其核心组件——处理器(Processor)、连接(Connection)、处理器组(Process Group)及拖放式画布。以下是实现该目标的具体步骤:
一、配置XML输入源处理器
该步骤用于从指定位置读取原始XML文件,为后续解析与转换提供数据输入。NiFi支持多种输入方式,可根据实际部署环境选择最适配的一种。
1、在NiFi画布空白处右键,选择“Add Processor”,搜索并添加“GetFile”处理器。
2、双击“GetFile”进入配置界面,在“Properties”选项卡中设置“Input Directory”为存放XML文件的本地路径,例如/opt/nifi/input/xml。
3、将“File Filter”设为正则表达式.*\.xml,确保仅捕获XML扩展名文件。
4、勾选“Keep Source File”为false,使文件被成功读取后自动移出输入目录。
二、解析XML内容为属性或流内容
原始XML需被结构化识别,以便后续按字段路由或转换。NiFi提供多个专用XML解析处理器,适用于不同解析粒度需求。
1、添加“EvaluateXPath”处理器,并将其上游连接至“GetFile”的success关系。
2、在“Properties”中设置“Destination”为“flowfile-content”,表示将XPath查询结果写入流内容主体。
3、添加一个自定义XPath属性,例如命名为“order_id”,值设为/order/id/text(),用于提取根节点下id文本值。
4、保存配置后,该处理器会将匹配的XML片段或提取值注入FlowFile属性或内容,供下游使用。
三、使用ConvertRecord处理器进行XML到JSON转换
当需要将XML结构标准化为通用中间格式(如JSON)时,ConvertRecord结合Schema Registry可实现无损类型映射与格式切换。
1、添加“ConvertRecord”处理器,并连接至“EvaluateXPath”的success关系。
2、在“Controller Services”中启用“XMLReader”和“JsonRecordSetWriter”两个服务。
3、为“XMLReader”配置“Schema Access Strategy”为“Infer Schema”,并设置“Treat Initial As Array”为true(若XML含多个同级根元素)。
4、为“JsonRecordSetWriter”设置“Schema Write Strategy”为“embedded”,确保输出JSON携带内联schema信息。
四、基于XML内容执行条件路由
根据XML中特定字段值将数据分流至不同处理分支,例如按订单状态区分正常处理与异常告警路径。
1、添加“RouteOnAttribute”处理器,连接至“ConvertRecord”的success关系。
2、在“Properties”中新增一个路由规则,名称设为“is_shipped”,值设为${xml.status:equals('shipped')}。
3、再新增一个规则“is_pending”,值设为${xml.status:equals('pending')}。
4、未匹配任何规则的FlowFile将自动进入“unmatched”关系,可用于兜底日志记录或重试队列。
五、将处理结果写入目标系统
完成解析、转换与路由后,需将最终输出持久化至文件系统、数据库或消息队列等目标端点。
1、添加“PutFile”处理器,连接至“RouteOnAttribute”的is_shipped关系。
2、配置“Directory”属性为目标路径,例如/opt/nifi/output/shipped。
3、添加“PutDatabaseRecord”处理器,连接至is_pending关系,并配置JDBC Connection Pool控制器服务。
4、在“PutDatabaseRecord”中设置“Statement Type”为“INSERT”,并指定目标表名为pending_orders,确保XML字段已映射至对应列名。










