You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PDI或Apache HOP将带元列的XML转换为CSV?

用Pentaho Data Integration (PDI/Kettle)或Apache HOP处理此类XML转CSV的方法

核心思路

这种XML的特点是元数据与数据分离:<metadata>节点定义列名,<data>下的<row>用无命名的<field>按顺序对应列值,所以需要先提取列名,再将数据字段与列名逐一关联。

具体操作步骤(PDI/HOP通用)

1. 读取XML中的数据行

使用XML Input组件,配置要点:

  • 文件/URL:选择目标XML文件
  • 循环XPath:设置为/response/results/data/row,用于遍历每一行数据
  • 字段配置:添加一个字段(比如命名为field_list),XPath设为field,勾选「将结果作为列表返回」,这样每行的所有<field>值会被打包成字符串列表(示例:["ACME-ITEM-01", "ACME"])

2. 提取元数据中的列名

再添加一个XML Input组件,专门读取列名:

  • 文件/URL:选择同一个XML文件
  • 循环XPath:设置为/response/results/metadata/column
  • 字段配置:添加字段column_name,XPath设为@name,提取每个列的名称
  • 用Group by组件将所有列名合并为一个逗号分隔的字符串,存入变量(比如column_names),或者生成仅含列名的数据集

3. 关联列名与数据字段

推荐用Script Values组件(选择JavaScript)实现动态列映射,代码示例:

// 获取列名列表和数据字段列表
var colNames = getVariable("column_names").split(",");
var fieldValues = field_list;

// 为每个列名赋值对应的字段值
for(var i = 0; i < colNames.length; i++) {
    setValue(colNames[i], fieldValues[i]);
}

如果不想用脚本,也可以按以下步骤操作:

  • 用Split Fields to Rows将field_list拆分为单行数据
  • 用Add Sequence给每行添加序号
  • 对列名数据集执行同样的拆分+加序号操作
  • 用Merge Join按序号关联列名与字段值
  • 用Pivot组件将行数据转回列结构

4. 输出为CSV文件

使用Text File Output组件,配置输出路径与文件名,选择CSV格式,组件会自动映射生成的列,直接输出即可。

注意事项

  • 确保<metadata>中的列数量与<row>内的<field>数量完全匹配,避免数据错位
  • 多<row>场景下,XML Input的循环XPath会自动遍历所有行,无需额外配置
  • HOP的组件名称与PDI基本一致,操作逻辑完全通用

内容的提问来源于stack exchange,提问作者Max B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:53:12