如何在SSIS中将一条XML记录拆分为雇主和雇员两条记录?
SSIS拆分XML记录为雇主/雇员两条独立记录的实现方案
数据流可视化实现(推荐)
1. 配置XML源组件
使用XML源读取目标XML文件,调整XPath配置,确保同时提取document节点的fileNo属性,以及所有item节点的name属性和text节点值。此时数据流会生成多行数据,每行对应一个item,包含字段:fileNo、item_name、item_text。
2. 派生列标记角色
添加派生列组件,新增Role字段,通过条件判断区分雇主/雇员:
LEFT([item_name], 8) == "Employer" ? "雇主" : "雇员"
3. 派生列提取统一字段名
再添加一个派生列组件,新增FieldName字段,剥离item_name的前缀:
RIGHT([item_name], LEN([item_name]) - 8)
示例:EmployerEmail转换为Email,EmployeeSurname转换为Surname。
4. 透视组件转换为宽表
添加透视组件,配置参数:
- 分组依据:
fileNo、Role - 透视键:
FieldName - 透视值:
item_text
处理后会生成两行数据,每行包含fileNo、Role、Email、Forename、Surname共5列,分别对应雇主和雇员的完整信息。
5. 导出至Excel
使用Excel目标组件,将透视后的数据集写入目标Excel文件即可。
脚本组件实现备选方案
如果透视组件配置有困难,可采用脚本组件拆分:
- 将XML源读取到的单条宽记录(包含
fileNo及6个雇员/雇主属性字段)传入脚本组件(转换类型)。 - 在脚本组件中创建两个输出:
EmployerOutput和EmployeeOutput,输出字段均设置为fileNo、Email、Forename、Surname、Role。 - 在
ProcessInputRow方法中编写逻辑:- 构建雇主记录:赋值
fileNo、EmployerEmail、EmployerForename、EmployerSurname,Role设为"雇主",调用AddRow()输出。 - 构建雇员记录:赋值
fileNo、EmployeeEmail、EmployeeForename、EmployeeSurname,Role设为"雇员",调用AddRow()输出。
- 构建雇主记录:赋值
- 合并两个输出(如需写入同一工作表)后,通过Excel目标组件导出。
内容的提问来源于stack exchange,提问作者AMD
相关产品推荐
相关产品推荐

