2015-10-08 1 views
0

моего входного XML:Looping с помощью dataweave

<Root> 
    <Element> 
     <Record att="a">value</Record> 
     <Record att="b">value</Record> 
      . 
      . 
      <Record att="g">value</Record> 
      <Record att="h">value</Record> 
      . 
      . 
      <Record att="p">value</Record> 
      . 
      . 
      <Record att="t">value</Record> 
       . 
       . 
      <Record att="w">value</Record> 
       . 
       . 
      <Record att="z">value</Record> 
    </Element> 
    <Element> 
     <Record att="a">value</Record> 
     <Record att="b">value</Record> 
      . 
      . 
      <Record att="g">value</Record> 
      <Record att="h">value</Record> 
      . 
      . 
      <Record att="p">value</Record> 
      . 
      . 
      <Record att="t">value</Record> 
       . 
       . 
      <Record att="w">value</Record> 
       . 
       . 
      <Record att="z">value</Record> 
    </Element> 
    . 
    . 
    . 
    . 
    . 
    . 
    </Root> 

В dataweave конфигурации я пытался:

%dw 1.0 
    %input payload application/xml 
    %output application/csv 

    --- 
    payload.root.*Element[0].*Record map { 
    (id:[email protected]) when ([email protected]) == "g" or ([email protected]) == "t", 
    (type:([email protected]) when ([email protected]) == "g" or ([email protected]) == "t" 
    } 

о/р получил в моем формате CSV:

id,type (headers) 
    blanklines 
    . 
    . 
    . 
    g,g 
    . 
    . 
    . 
    . 
    t,t 
    . 
    . 

Требование ясно , Мне нужны только записи элемента [0]. У моего CS/CS нет пустых строк. Ожидаемый результат должен быть:

id,type 
    g,g 
    t,t 

Я couldnot до сих пор понять синтаксис и концепции dataweave для зацикливания. Пожалуйста, помогите мне. Любое лучшее решение принято.

+0

Пожалуйста, помогите мне –

ответ

0

Как вы получаете доступ к атрибуту имени (@name), как его нет в вашем XML? Вы должны получить доступ к атрибуту «att»? (@att)

Вы отправили правильный код и XML?

OK Это должно выполнить эту работу за вас.

%dw 1.0 
%input payload application/xml 
%output application/csv 
--- 
payload.Root.*Element[0].*Record map { 
(id:[email protected]) , 
(type:[email protected]) 
} filter ($.id == "g" or $.type == "t") 
+0

я изменил свое dataweave код в соответствии с входным XML –

+2

@masettimanikanta пожалуйста, сообщите, если это сделали работу за вас, и отметьте, как ответило так что мы знаем! – JoostD

0

Если вы не используете индекс это относится к первому элементу. Вы можете попробовать удалить индекс [0]

%dw 1.0 
%input payload application/xml 
%output application/csv 
--- 
payload.Root.*Element.*Record map { 
    (id:[email protected]) , 
    (type:[email protected]) 
} filter