Конвертировать XML файл в CSV в Java

@ Перед тем, как, возможно, будут предложены несколько дублирующих вопросов, я не думаю, что в этом случае, возможно, сначала прочитайте это, я постараюсь быть максимально кратким. Название дает основную идею.

Вот пример 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

Эта 1-я строка является заголовком, она также должна быть включена в CSV. У меня есть несколько полезных ссылок на Stax сегодня, я действительно не знаю, какой правильный / оптимальный подход для этого, я борюсь с этим в течение 3 дней, пока не собираюсь сдаваться.

Скажи мне, что ты думаешь, как бы ты решил это

Я забыл упомянуть, что это очень большой XML-файл до 1 ГБ

ОБНОВЛЕНИЕ BOUNTY:

Я ищу более общий подход, означающий, что это должно работать для любого количества узлов с любой глубиной, и иногда, как в примере xml, может случиться так, что одинitem Объект имеет большее количество узлов, чем следующий / предыдущий, поэтому для этого должен быть случай (поэтому все столбцы и значения совпадают в CSV).

Также может случиться, что узлы имеют одинаковое имя / localName, но разные значения и атрибуты, если это так, тогда в CSV должен появиться новый столбец с соответствующим значением. (Я добавил пример этого случая внутри<averages> тег называетсяcategory)

Ответы на вопрос(0)

Ваш ответ на вопрос