@Before Вероятно, будут некоторые предложения по дублированию вопросов, я не думаю, что это так, возможно, сначала прочитайте это, я постараюсь быть как можно более кратким. Название дает основную идею.
Вот пример XML (случай 1):
<root>
<Item>
<ItemID>4504216603</ItemID>
<ListingDetails>
<StartTime>10:00:10.000Z</StartTime>
<EndTime>10:00:30.000Z</EndTime>
<ViewItemURL>http://url</ViewItemURL>
....
</item>
Вот пример XML (случай 2):
<Item>
<ItemID>4504216604</ItemID>
<ListingDetails>
<StartTime>10:30:10.000Z</StartTime>
<!-- Start difference from case 1 -->
<averages>
<AverageTime>value1</AverageTime>
<category type="TX">9823</category>
<category type="TY">9112</category>
<AveragePrice>value2</AveragePrice>
</averages>
<!-- End difference from case 1 -->
<EndTime>11:00:10.000Z</EndTime>
<ViewItemURL>http://url</ViewItemURL>
....
</item>
</root>
Я заимствовал этот XML из google, так или иначе мои объекты не всегда одинаковы, иногда есть дополнительные элементы, например, в case2. Теперь я хотел бы создать CSV, как это из обоих случаев:
ItemID,StartTime,EndTime,ViewItemURL,AverageTime,AveragePrice
4504216603,10:00:10.000Z,10:00:30.000Z,http://url
4504216604,10:30:10.000Z,11:00:10.000Z,http://url,value1,value2
Эта первая строка является заголовком, она также должна быть включена в csv. Сегодня у меня есть полезные ссылки на stax, я на самом деле не знаю, какой правильный/оптимальный подход для этого, я боюсь с этим уже 3 дня, не желая сдаваться.
Расскажите, как вы думаете, как бы вы решили этот
Я забыл упомянуть, что это очень большой xml файл до 1gb
ОБНОВЛЕНИЕ BOUNTY:
Я ищу более общий подход, означающий, что это должно работать для любого количества узлов с любой глубиной, а иногда, как в примере xml, может случиться, что один объект item
имеет большее количество узлов, чем следующий/предыдущий, так что для этого также должен быть случай (так что все столбцы и значения соответствуют CSV).
Также может случиться, что узлы имеют одинаковое имя /localName, но разные значения и атрибуты, если это так, то новый столбец должен появиться в CSV с соответствующим значением. (Я добавил пример этого случая внутри тега <averages>
под названием category
)