Цикл с использованием Dataweave

мой вход xml:

  <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:$.@att) when ($.@att) == "g" or ($.@att) == "t", 
    (type:($.@att) when ($.@att) == "g" or ($.@att) == "t"
  }

О / п, который я получил в моем CSV:

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

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

    id,type
    g,g
    t,t

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


person masetti mani kanta    schedule 08.10.2015    source источник


Ответы (3)


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

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

Хорошо. Это должно сработать за вас.

%dw 1.0
%input payload application/xml
%output application/csv 
---
payload.Root.*Element[0].*Record map {
(id:$.@att) ,
(type:$.@att)
} filter ($.id == "g" or $.type == "t")
person JoostD    schedule 24.10.2015
comment
Я изменил свой код dataweave в соответствии с входным XML - person masetti mani kanta; 26.10.2015
comment
@masettimanikanta, пожалуйста, сообщите, сработало ли это для вас, и отметьте ответ, чтобы мы знали! - person JoostD; 05.11.2015

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

%dw 1.0
%input payload application/xml
%output application/csv 
---
payload.Root.*Element.*Record map {
    (id:$.@att) ,
    (type:$.@att)
} filter 
person Srinivas    schedule 21.02.2018

Этот код ниже будет работать нормально

Weave Code
%dw 1.0
%output application/csv
---
payload.Root.*Element[0].*Record filter (($.@att == 'g') or ($.@att == 't')) map {
    (id : $.@att),
    (type : $.@att)
} 

Выход

id,type
g,g
t,t
person Zahid    schedule 04.03.2017