<?xml version="1.0" encoding="ISO-8859-1"?>
<ONIXmessage
xmlns="http://www.editeur.org/onix/3.0/short/onix-international.dtd" release="3.0">
<header>
<sender>
<x298>Ingram Book Company</x298>
<x299>Andy Stone</x299>
<j272>[email protected]</j272>
</sender>
<x307>20230924</x307>
<m184>eng</m184>
<x310>01</x310>
<m186>USD</m186>
</header>
<product>
<a001>015864289</a001>
<a002>03</a002>
<productidentifier>
<b221>02</b221>
<b244>000200853X</b244>
</productidentifier>
<descriptivedetail>
<x314>00</x314>
<b012>BC</b012>
<b333>B102</b333>
<b333>B305</b333>
<measure>
<x315>01</x315>
<c094>8.50</c094>
<c095>in</c095>
</measure>
<measure>
<x315>02</x315>
<c094>5.50</c094>
<c095>in</c095>
</measure>
<measure>
<x315>03</x315>
<c094>0.45</c094>
<c095>in</c095>
</measure>
<measure>
<x315>08</x315>
<c094>0.4200</c094>
<c095>lb</c095>
</measure>
<x316>CA</x316>
</descriptivedetail>
</product>
</ONIXmessage>
我需要将此 xml 文件加载到 Pentaho 中并将其转换为 csv 格式。措施是具有多个循环,并且仅考虑第一个循环。我需要列名称,例如 x315、x315_1、x315_2、x315_3、x315_4...
好的,按照这篇博客文章:https://dwbi.org/pages/169,您可能需要分块读取该文件多次,然后合并流以仅生成一个文件。
因此,您读取构成唯一文件的属性(header的内容,以及示例中的大多数产品属性:a001、a002、b221...),同时在单独的流,您读取 measure 中的属性,以及上面构成唯一标识符的一些属性,在我的示例中,我只需再次读取 x314 属性,然后使用它进行合并,但是对于您的真实文件,您将可能需要添加更多信息或使用不同的属性作为连接的唯一键。
所以我的转变看起来像这样: 要获得此结果,您可以放入 CSV 文件: |x298|x299|...|x315|c094|c095| |---|---|---|---|---|---| |英格拉姆|安迪·斯通|...|01|8.50|英寸| |英格拉姆|安迪·斯通|...|02|5.50|英寸| |英格拉姆|安迪·斯通|...|03|0.45|英寸| |英格拉姆|安迪·斯通|...|04|0.4200|磅|
那么如何配置Measure_content中的从XML获取数据步骤呢?在内容选项卡中配置步骤时,在循环 XPath 配置中,您要求获取 XPath 节点并选择“测量”路径:
选择路径后,转到下一个选项卡“字段”,除了获取度量节点中的属性之外,您还可以手动添加 x314 字段并手动放置路径,在所选节点中向上一级(
../*[name()='x314']
):