如何遍历 XML 中的元素以切碎并加载到数据库
How to loop through elements in XML to shred and load to database
我有一个要求,必须将传入的 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 并将其切碎到数据库中。
我正在使用 'Get XML Data' 组件来读取 XML。
我已将 'loop 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 loop' 定义为 'root/creditreport/data3',那么元素 'data3' 的问题就会得到解决,但也有其他元素可以重复,然后我将再次站在问题的起点。
有什么建议!!
如果父节点 (dataX) 和子节点 (A、B、C 等) 确实 unique/sequential 您可以进行一个非常通用的设置:
使用/root/creditreport/*/*
作为xpath循环路径
像这样手动设置字段:
这应该让你得到这样的输出:
从这里您可以根据需要对数据进行非规范化或其他处理。请注意,我在父级别为节点添加了一个序列号,因此您可以区分第一个 Data3 和第二个等等。
如果另一方面,您的 dataX 节点都具有相同的子节点(A、B A、B 而不是 A、B C、D 等),您可以使用 /root/creditreport/*
作为 xpath 循环路径并跳过父节点字段,正常配置你的值节点A和B。
这里是定义和输出。所有字段都是相对于当前节点(.)定义的。
我有一个要求,必须将传入的 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 并将其切碎到数据库中。 我正在使用 'Get XML Data' 组件来读取 XML。 我已将 'loop 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 loop' 定义为 'root/creditreport/data3',那么元素 'data3' 的问题就会得到解决,但也有其他元素可以重复,然后我将再次站在问题的起点。
有什么建议!!
如果父节点 (dataX) 和子节点 (A、B、C 等) 确实 unique/sequential 您可以进行一个非常通用的设置:
使用/root/creditreport/*/*
作为xpath循环路径
像这样手动设置字段:
这应该让你得到这样的输出:
从这里您可以根据需要对数据进行非规范化或其他处理。请注意,我在父级别为节点添加了一个序列号,因此您可以区分第一个 Data3 和第二个等等。
如果另一方面,您的 dataX 节点都具有相同的子节点(A、B A、B 而不是 A、B C、D 等),您可以使用 /root/creditreport/*
作为 xpath 循环路径并跳过父节点字段,正常配置你的值节点A和B。
这里是定义和输出。所有字段都是相对于当前节点(.)定义的。