преобразование XML в CSV, где разные теги в XML и соответствующие им вложенные теги становятся позициями CSV

Я пытаюсь сделать так, чтобы теги атрибутов внутри вспомогательного тега были строками файла CSV.

Я попытался выполнить итерацию с использованием функции карты, но я получаю только одно значение за раз. Я хочу, чтобы в этом XML было два тега Accesory Type, я хочу, чтобы их соответствующие теги атрибутов стали каждым элементом строки в CSV

 <Accessory Type="Panel">
    <PartNumber>9021447</PartNumber>
    <Attribute Name="DescCode">Operating Panel, White/PI White, Low E SmartSun Tempered Glass</Attribute>
    <Attribute Name="Mark_ID">41424</Attribute>
    <Attribute Name="Order_Quantity">1</Attribute>
    <Attribute Name="QUOTE_QUANTITY">1</Attribute>
    <Attribute Name="Quote_Quantity_Extended">1</Attribute>
    <Attribute Name="MarkName">0001</Attribute>
    <Attribute Name="US_ENERGY_STAR_CLIMATE_ZONE">Northern</Attribute>
    <Attribute Name="SubUnitID">1</Attribute>
    <Attribute Name="AW_Control_2">47AoYY</Attribute>
    <Attribute Name="ReferenceID">3</Attribute>
    <Attribute Name="OrderPONum"/>
    </Accessory>
    <Accessory Type="Screen">
    <PartNumber>2505930</PartNumber>
    <Attribute Name="Total_Pre_Price_in_USD">208.70</Attribute>
    <Attribute Name="Total_Price_in_USD">208.700</Attribute>
    <Attribute Name="QUOTE_QUANTITY">1</Attribute>
    <Attribute Name="Quote_Quantity_Extended">1</Attribute>
    <Attribute Name="DescCode">Insect Screen, Gliding, White</Attribute>
    <Attribute Name="Mark_ID">41424</Attribute>
    <Attribute Name="Order_Quantity">1</Attribute>
    </Accessory>

Я попытался сделать атрибуты вспомогательного тега позициями.

Ожидаемый результат: 9021447 | Панель управления, белый / белый PI, закаленное стекло Low E SmartSun | 41424 // и в следующей строке 25005930 | 208.70 | 1 // и т. Д.

Это код, который я пробовал% dw 2.0 output application / json --- payload.m2oFile.m2oOrder.Unit. * Accessory map (value, index) -> {(index): value. * Attribute filter ($. @ Имя == "MarkID"), (индекс): значение. * Фильтр атрибутов ($. @ Name == "PRODTYPE"), (индекс): значение. * Фильтр атрибутов ($. @ Name == "UNIT_CODE")}


person sai bhargav    schedule 06.09.2019    source источник


Ответы (1)


Попробуйте с этим подходом ..

 %dw 2.0 
 output application/csv header=false
 --- 

 (payload.a.*Accessory map {
      PN: $.PartNumber,
      ($.*Attribute map  {
        (($$) : $)  if (isEmpty($) == false)
 })
 }
 )

Должен дать вам следующий результат:

введите здесь описание изображения

PS: мне пришлось добавить "a" в качестве корня к xml, иначе xml не будет правильно сформирован ..

person Salim Khan    schedule 06.09.2019