Convert XML-Datei in CSV in Java

@ Bevor es wahrscheinlich einige doppelte Fragenvorschläge geben wird, denke ich nicht, dass dies der Fall ist, lese dies vielleicht zuerst, ich werde versuchen, so kurz wie möglich zu sein. Titel gibt Grundidee.

Hier ist ein XML-Beispiel (Fall 1):

<root>
      <Item>
        <ItemID>4504216603</ItemID>
        <ListingDetails>
          <StartTime>10:00:10.000Z</StartTime>
          <EndTime>10:00:30.000Z</EndTime>
          <ViewItemURL>http://url</ViewItemURL>
            ....
           </item>      

Hier ist ein XML-Beispiel (Fall 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>

Ich habe diese XML von Google ausgeliehen, trotzdem sind meine Objekte nicht immer gleich, manchmal gibt es zusätzliche Elemente wie in case2. Jetzt möchte ich aus beiden Fällen eine solche CSV-Datei erstellen:

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

Diese 1. Zeile ist Header und sollte auch in csv enthalten sein. Ich habe heute ein paar nützliche Links zu stax, ich weiß nicht wirklich, was der richtige / optimale Ansatz dafür ist. Ich habe jetzt seit 3 Tagen damit zu kämpfen und bin noch nicht wirklich bereit aufzugeben.

Sag mir was du denkst wie würdest du das lösen

Ich habe vergessen zu erwähnen, dass dies eine sehr große XML-Datei mit einer Größe von bis zu 1 GB ist

BOUNTY UPDATE:

Ich suche nach einem allgemeineren Ansatz, was bedeutet, dass dies für eine beliebige Anzahl von Knoten mit einer beliebigen Tiefe funktionieren sollte, und manchmal kann es wie in der Beispiel-XML vorkommen, dass eineritemas @ -Objekt hat eine größere Anzahl von Knoten als das nächste / vorherige, daher sollte dies auch berücksichtigt werden (daher stimmen alle Spalten und Werte in CSV überein).

Auch kann es vorkommen, dass Knoten denselben Namen / lokalen Namen, aber unterschiedliche Werte und Attribute haben. Ist dies der Fall, sollte in CSV eine neue Spalte mit dem entsprechenden Wert angezeigt werden. (Ich habe ein Beispiel für diesen Fall in @ hinzugefüg<averages> tag mit dem Namencategory)

Antworten auf die Frage(16)

Ihre Antwort auf die Frage