2016-02-29 460 views
1

我一直在pentaho Kettle中使用STAX解析器很长时间。但突然间我发现了一个奇怪的情况。此前是具有预先定义的XML文件的级别一样:Pentaho Kettle动态XML解析

<A> 
    <TRADE a="1" b="2"> 
     <TRADE a="3" b="4"> 
     </TRADE> 
    </TRADE> 
    </A> 

OR 

    <A> 
    <TRADE a="100" b="200"> 
     <TRADE a="1" b="2"> 
      <TRADE a="3" b="4"> 
      <TRADE a="5" b="6"> 
      </TRADE> 
      </TRADE> 
     </TRADE> 
    </TRADE> 
    </A> 

如果文件包括贸易则是提前知道与同为三个四级的两个级别(四个为最高)。 因此,在STAX解析器(A/TRADE/TRADE/TRADE for level three等)中提到了Xpath。

预期输出:

在第一种情况 - 两个条目(行)在贸易表一个父贸易等儿童贸易。 第二种情况 - Trade Table中的四个条目(行) - 建立父子关系。

如何动态地做到这一点不知道交易的(深度)

数不过现在文件可以有贸易(分1和最大值15)的任何水平。我对如何在pentaho水壶中使用STAX解析器动态解析TRADE文件感到困惑。

任何指导将非常有帮助。

问候, 维卡斯

+0

什么是预期的输出? – bolav

+0

@bolav - 我需要在Trade Table中解析。从上面可以看出,在第一种情况下,应该有两个(行)条目 - 一个用于父代,另一个用于子代(使用xml_element_id和parent_xml_element_id建立父子关系),而在第二种情况下应该有四个(行)父母子女关系)在贸易表。这种解析应该在事先不知道交易数量的情况下进行动态分析。 –

+0

请为您的两个示例添加行的预期布局,以便我能够完全理解您的问题。一个级别可以有几个交易? – bolav

回答

1

有了这个转型:

Screenshot of transformation

Filter rows

Screenshot of Filter rows

Row denormaliser

Screenshot of Row denormaliser

提供了以下的输出:

Screenshot of output

+0

非常感谢。这对我有用。现在我可以继续进行其他更改。干杯!! –