我有一个要求,传入的 XML 必须被分解并加载到数据库中。 所有元素都有各自的表格。 传入的 XML 看起来像这样:
<root>
<creditreport>
<data1>
<A>val1</A>
<B>val2</B>
</data1>
<data2>
<C>val3</C>
<D>val4</D>
</data2>
<data3>
<E>val5</E>
<F>val6</F>
</data3>
<data3>
<G>val7</G>
<H>val8</H>
</data3>
</creditreport>
</root>
现在在 Kettle 中,我正在设计一个通用框架,它可以获取 XML 并将其分解到数据库中。 我正在使用“获取 XML 数据”组件来读取 XML。 我已将“循环 Xpath”定义为 root/creditreport,然后我将字段一一读取为:
name xpath Element ResultType
A data1 Node Valueof
B data1 Node Valueof
.....
.....
.....
E data3 Node Valueof
.....
.....
G data3 Node Valueof
但问题是,它只粉碎了第一行并丢失了第二行。我可以理解原因,因为 XPATH 循环仅到 。 如果我将“xpath循环”定义为“root/creditreport/data3”,那么元素“data3”的问题就得到解决,但还有其他元素也可以重复,然后我将再次站在问题的起点。
有什么建议吗!!
如果父节点(dataX)和子节点(A、B、C 等)确实是唯一/连续的,您可以进行一个非常通用的设置:
使用
/root/creditreport/*/*
作为 xpath 循环路径
手动设置这样的字段:
这应该给你一个像这样的输出:
从这里您可以根据需要对数据进行非规范化或其他处理。请注意,我已经为父级别的节点添加了序列号,因此您可以区分第一个 Data3 和第二个,等等。
另一方面,如果您的 dataX 节点都具有相同的子节点(A、B A、B 而不是 A、B C、D 等),您可以使用
/root/creditreport/*
作为 xpath 循环路径并跳过父节点字段,配置通常你的值节点 A 和 B。
以下是定义和输出。所有字段都是相对于当前节点 (.) 定义的。