Динамический разбор XML в Pentaho Kettle

Я довольно давно использую парсер STAX в 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>

Если файл состоит из двух уровней торговли, то он был известен заранее, и то же самое для трех или четырех уровней (четыре — самые высокие). Соответственно Xpath был упомянут в синтаксическом анализаторе STAX (A/TRADE/TRADE/TRADE для третьего уровня и т. д.).

Ожидаемый результат:

В первом случае - две записи (строки) в таблице сделок: одна для родительской сделки, другая для дочерней. Во втором случае - четыре записи (строки) в торговой таблице - установление отношения родитель-потомок.

Как сделать это динамически, не зная количества сделок (глубины)

Но теперь файл может иметь любой уровень ТОРГОВЛИ (мин 1 макс 15). Я сбит с толку тем, как динамически анализировать файл TRADE с помощью синтаксического анализатора STAX в чайнике Pentaho.

Любое руководство будет чрезвычайно полезным.

С уважением, Викас


person Vikas Kumar    schedule 29.02.2016    source источник
comment
Каков ожидаемый результат?   -  person bolav    schedule 29.02.2016
comment
@bolav - мне нужно проанализировать в таблице торговли. Итак, как видно выше, в первом сценарии должно быть две записи (строки) - одна для родителя, а другая для дочернего элемента (установление отношения родитель-потомок с использованием xml_element_id и parent_xml_element_id), тогда как во втором сценарии должно быть четыре записи (строка) (с отношения родитель-потомок) в таблице Trade. Этот разбор должен происходить динамически, без предварительного знания количества сделок.   -  person Vikas Kumar    schedule 01.03.2016
comment
Пожалуйста, добавьте ожидаемый макет строк для ваших двух примеров, чтобы я мог полностью понять ваш вопрос. Может ли один уровень иметь несколько сделок?   -  person bolav    schedule 01.03.2016
comment
@bolav - Да, на любом уровне может быть несколько сделок. Чтобы объяснить макет, позвольте мне попробовать. Есть Торговый стол. Когда сделка первого уровня сохраняется с ее атрибутом, существуют xml_parent_element_id и xml_element_id, и если соответствующая дочерняя сделка сохраняется, то существует ссылочная целостность между xml_parent_element_id дочерней сделки и xml_element_id родительской сделки.   -  person Vikas Kumar    schedule 01.03.2016
comment
Вы ищете строку, которая имеет: xml_element_id,xml_parent_element_id,a,b для всех сделок?   -  person bolav    schedule 01.03.2016
comment
@ bolav - Да, именно так.. Но синтаксический анализ должен происходить динамически, независимо от уровня сделок.   -  person Vikas Kumar    schedule 01.03.2016


Ответы (1)


С этим преобразованием:

Скриншот трансформации

Filter rows:

Снимок экрана со строками фильтра

Row denormaliser:

Скриншот денормализатора строк

Дает следующий вывод:

Скриншот вывода

person bolav    schedule 01.03.2016
comment
Большое спасибо. Это работает для меня. Теперь я могу приступить к другим изменениям. Ваше здоровье!! - person Vikas Kumar; 01.03.2016