我有一个 XML 文件,其格式为数据:
<LineHeader>
<LineItem LineNumber="1">
<Product SKU="99991L" DespatchQuantity="70">
<Item Type="EANCode">0821793005795</Item>
<SKUDescription1>HTC SNAP SYST</SKUDescription1>
<SKUDescription2 />
<SerialNumberHeader>
<SerialNumber>358991022404733</SerialNumber>
<SerialNumber>358991022404808</SerialNumber>
</SerialNumberHeader>
</Product>
</LineItem>
<LineItem LineNumber="2">
<Product SKU="37099M" DespatchQuantity="50">
<Item Type="EANCode">0843163067660</Item>
<SKUDescription1>RIM KEPLER SYST</SKUDescription1>
<SKUDescription2 />
<SerialNumberHeader>
<SerialNumber>353933040011632</SerialNumber>
<SerialNumber>353933042759923</SerialNumber>
</SerialNumberHeader>
</Product>
</LineItem>
</LineHeader>
现在我希望输出成为一个文本文件,其中包含列名和记录,如下所示:
LineItem
LineNumber Product SKU EANCode SKUDescription1 SerialNumber
1 99991L 821793005795 HTC SNAP SYST 358991022404808
1 99991L 821793005795 HTC SNAP SYST 358991022434987
1 99991L 821793005795 HTC SNAP SYST 358991022435505
2 37099M 843163067660 RIM KEPLER SYST 353933040011632
2 37099M 843163067660 RIM KEPLER SYST 353933042759923
输出数据应如上表所示。 我们如何在 pentaho 中实现循环。
答案 0 :(得分:3)
假设你想为每个序列号输出一行输出(问题显示五行输出,但我认为你的意思是四个):
在Get XML Data
步骤
Content
标签
将Loop XPath设置为/LineHeader/LineItem/Product/SerialNumberHeader
Fields
标签
Name XPath Element
LineNumber ../../../LineNumber Attribute
Product SKU ../../SKU Attribute
EANCode ../../Item Node
SKUDescription1 ../../SKUDescription1 Node
SerialNumber . Node
将输出
LineNumber Product SKU EANCode SKUDescription1 SerialNumber
1 99991L 0821793005795 HTC SNAP SYST 358991022404733
1 99991L 0821793005795 HTC SNAP SYST 358991022404808
2 37099M 0843163067660 RIM KEPLER SYST 353933040011632
2 37099M 0843163067660 RIM KEPLER SYST 353933042759923
HTH!
答案 1 :(得分:0)
正如我所看到的,这里的基本问题是ETL工具旨在处理表格数据,而不是分层数据。试图做到这一点就像强迫一个方形的钉子进入一个圆孔。你可能能够完成一次或两次,但它不会很漂亮,它会很容易破坏,而且肯定不会重复使用。
使用StAX输入步骤的samples目录中有一个示例转换来执行此操作。它被称为'XML输入流(StAX)测试4 - Hierarchies.ktr'。但是请注意,PDI人员使用UDJC来构建层次结构。
我已经把你的例子弄乱了一段时间了,我找不到一个优雅的方法来完成转换。我认为编写脚本是你最好的选择。
编辑 -
您知道,这可能是自定义控件的一个很好的应用程序。可以将XML文档映射到表格数据,就像您想要输出的那样。我怀疑这是一个常见的问题;我想知道Matt&amp;公司有这样的计划。