Konvertieren von XML-Datei in CSV-Format in java

@Vor Es werden wahrscheinlich einige doppelte Fragen, Anregungen, ich glaube nicht, dass das der Fall ist, vielleicht Lesen Sie dies zuerst, ich werde versuchen es so kurz wie möglich. Titel gibt die grundlegende Idee.

Hier ist ein Beispiel-XML(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 Beispiel-XML(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 lieh mir dieses XML von google sowieso meine Objekte sind nicht immer gleich, manchmal gibt es zusätzliche Elemente, wie in case2. Jetzt würde ich gerne produzieren CSV-wie dies von beiden Fällen:

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 Kopfzeile sollte es auch aufgenommen werden im csv-Format. Ich habe einige nützliche links zu stax habe ich heute nicht wirklich weiß nicht, was ist der richtige/optimale Konzept für diese, ich bin mit diesen zu kämpfen, für 3 Tage jetzt, nicht wirklich aufgeben noch.

Sagen Sie mir, was Sie denken, wie würden Sie dies lösen,

Ich vergaß zu erwähnen, dies ist sehr großen xml-Datei bis zu 1gb

BOUNTY UPDATE :

Ich bin auf der Suche nach mehr Generischen Ansatz, was bedeutet, dass diese Arbeit sollte für eine beliebige Anzahl von Knoten mit beliebiger Tiefe, und manchmal, wie im Beispiel-xml ist, kann es passieren, dass man item Objekt hat eine größere Anzahl von Knoten als die nächste/vorhergehende, so sollte es auch den Fall(also alle Spalten und Werte entsprechen in CSV).

Außerdem kann es passieren, daß Knoten, die den gleichen Namen haben/localName, aber unterschiedliche Werte und Attribute, wenn das der Fall ist, dann neue Spalte angezeigt werden soll in CSV mit den entsprechenden Wert. (Ich fügte hinzu, Beispiel diesem Fall innerhalb <averages> tag aufgerufen category)

Sind die Werte Wert1, ... , wertn immer sofort Kinder der <averages/> element? Ist averages das einzige element, das erscheinen könnte? Oder tun, Sie müssen flexibler sein, über das, was dort erscheint?
Ich aktualisiert meine Frage
über Ihr "update": wenn nicht das erste element ist die mit den meisten Spalten, als Sie gerade zwei Pässe/Schritte für die transformation: in Schritt eins, die Sie nur sammeln Sie alle Spalten, die in Schritt 2 Verfahren Sie wie beschrieben. Wenn kein Wert Knoten zu einem bestimmten Knoten zu finden ist, als können Sie einen Wert ein, den Sie wünschen (null oder leer oder was auch immer-Konvention, die Sie mögen - siehe meine Beschreibung in die Antwort). Es ist nicht ein problem, dass die Knoten Ineinander verschachtelt sind, da für CSV-werden Sie rot flach.
Ionescu danke für deine Antwort, ich denke ich habe genug gesammelt algorithmen für die Lösung, ich habe sogar ein implementiert(funktioniert nicht richtig), aber jetzt ich bin auf der Suche nach etwas code, damit Sie das Kopfgeld.

InformationsquelleAutor ant | 2010-07-20

Schreibe einen Kommentar