提问人:swathi anand 提问时间:11/1/2023 最后编辑:Rishu Sswathi anand 更新时间:11/13/2023 访问量:21
如何在 Pentaho 中定义循环 xpath
How to define the loop xpath in Pentaho
问:
<?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,您可能需要分块多次读取文件,然后合并流以仅生成一个文件。
因此,您读取了构成唯一文件的属性(标头的内容,以及示例中的大多数产品属性:a001、a002、b221...),同时,在单独的流中,您读取了度量中的属性,以及上面构成唯一标识符的一些属性,在我的示例中,我只是读取了 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']
评论