如何在Pentaho中定义循环xpath

问题描述 投票:0回答:1
<?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...

pentaho pentaho-spoon pentaho-data-integration pentaho-cde pentaho-design-studio
1个回答
0
投票

好的,按照这篇博客文章:https://dwbi.org/pages/169,您可能需要分块读取该文件多次,然后合并流以仅生成一个文件。

因此,您读取构成唯一文件的属性(header的内容,以及示例中的大多数产品属性:a001a002b221...),同时在单独的流,您读取 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']
):

© www.soinside.com 2019 - 2024. All rights reserved.