Получение родительского индекса в итерации карты - PullRequest
0 голосов
/ 04 июня 2019

Моя задача состоит в том, чтобы «сплющить» трехуровневую структуру в двухуровневую структуру.

Я перебираю трехуровневую структуру в XML, и я сопоставляю поля «Level3» с «Level2», и этоработает нормально, но мне также нужен индекс 'Level2' в одном из отображений 'Level3'.

Поэтому моя проблема заключается в том, чтобы "получить Level2.index () во время итерации Level3".

Надеюсь, вы можете помочь: -)

XML structure (IN):
-----------------------
<?xml version="1.0" encoding="UTF-8"?>
<ns:Level1 xmlns:ns="urn:aaaa:bbbb:cccc">
  <Level2>
    <Level3>
    </Level3>
    <Level3>
    </Level3>
  </Level2>
  <Level2>
    <Level3>
    </Level3>
    <Level3>
    </Level3>
  </Level2>
</ns:Level1>

XML structure (OUT):
-----------------------
<?xml version="1.0" encoding="UTF-8"?>
<ns:Level1 xmlns:ns="urn:aaaa:bbbb:cccc">
  <Level2>
  </Level2>
  <Level2>
  </Level2>
  <Level2>
  </Level2>
  <Level2>
  </Level2>
</ns:Level1>


Dataweave 2.0 Code:
-----------------------
(payload.ns0#Level1.*Level2.*Level3 map ( level3 , indexOfLevel3 ) -> {
  Level3Index: payload.ns0#Level1.*Level2.index()?? "",
})

1 Ответ

2 голосов
/ 04 июня 2019

Самый простой способ - вкладывать в карты и выравнивать их, используя функцию расширения объекта. Динамические элементы Doc

%dw 2.0
output application/xml
---
Level1: {
    ( //Flatten all Level2
        payload.Level1.*Level2 map ((item, level2Index) -> 
            {
                (//Flatten all the level 3 under level2
                    item.*Level3 map ((item, level3Index) -> {
                        Level3: level2Index
                    })
                )
            }
        )
    )
}
...