Riesen-XML-Datei verarbeiten

Status
Nicht offen für weitere Antworten.

de_hans

Mitglied
hallo zusammen,

ich habe die aufgabe bekommen XML dateien zu verändern/manipulieren, das problem daran, die dateien sind zwischen 8GB-14GB groß!
da ich großen zeitdruck hatte und wußte das die einzelnen elemente immer schön mit zeilenumbruch untereinander stehen, verarbeite ich diese im moment wie eine textdatei(ich weiß, ich weiß, ist nicht wirklich toll, aber es funktioniert).
heißt, ich benutze BufferedReader, BufferedWriter, PrintWriter - fange meine Elemente mit contains ab, speichere blöcke/knoten in ArrayLists zwischen. alles wunderbar, sogar die laufzeiten halten sich in grenzen(bei einfachen suchmustern 30-45min, bei komplexeren 1,5h).
so, nun kann es aber sein das die datei ohne jeglichen zeilenumbruch kommt, also kann ich mein miniprogrämmle in die tonne treten und muss was neues tippen.

mal ein Bsp für meine aufgabe:

ich soll das attribut att1 von elem2 auf 'J' ändern wenn att1 von elem7=1 und att1 von elem12=1, wenn aber att1 von elem elem12=3 dann soll z.b.: das ganze elem1 entfernt werden oder z.b. elem2 entfernt werden!

Code:
<xml>
	<elem1 att1="12" att2="1">
		<elem2 att1="N"/>
		<elem3 att1="1">
			<elem4 att1="F"/>
			<elem5 att1="!">
				<elem6>
					<elem7 att1="1"/>					
				</elem6>
			</elem5>
			<elem8 att1="aa" att2="4">
				<elem9>
					<elem10 att1="1"/>
					...usw...
				</elem9>
			</elem8>			
		</elem3>
		<elem11>
			<elem12 att1="1"/>
			<elem13>
				...usw
			</elem13>
		</elem11>		
	</elem1>
</xml>


deswegen jetzt meine frage zum generellen vorgehen.

ich muss dazusagen das ich bei der XML verarbeitung in java absoluter neuling bin und nicht so richtig weiß wie ich das machen soll. ich dachte mir jedenfalls das ich den SAX schonmal zum einlesen benötige(?), ist doch die einzige möglichkeit ne XML datei sequentiell einzulesen, oder???
aber wie bekomm ich das mit sax wieder raus? der kann doch gar nicht schreiben, oder?
kann ich irgendwie sax - mit DOM,JDOM kombinieren?

wie würdet ihr vorgehen?
habt ihr nen vorschlag? wäre superdankbar!!!

viele grüße
 

KSG9|sebastian

Top Contributor
Ne XML-Datei in Gigabyte-Größe? Das ist nicht euer ernst, oder? Was macht ihr denn mit dem Teil? Serialisiert ihr HDTV-Filme rein? *G*

Also ich bezweifel dass du mit XML-Parsen wirklich ne Chanche hast. JDOM kannste vergessen da der Baum deinen Speicher sprengen wird, evtl. SAX..
Gruß
 

de_hans

Mitglied
das sind abrechnungsdaten von insgesamt über 3500 kunden, die aber in einer datei zusammengefasst werden müssen!!!
ursprünglich hat jeder kunde eine eigene datei(ca 4-4.5MB) diese müssen aber zu einer gesamtdatei zusammengefasst werden! jetzt könnte man ja meinen ich sollte einfach auf die ursprungsdateien gehen und diese manipulieren!? das geht auch nicht, weil die gesamtdatei noch von einem weiteren programm(von einer externen firma) weiterverarbeitet werden muss. über diese finale Version läuft eine prüfung und dann soll mein programm kommen(würde unglaublich viel zeit kosten an dieser stelle nochmal vorne bei den einzeldateien anzusetzen!!!)!
 

Lim_Dul

Top Contributor
Mit Sax wirst du sie vermutlich einlesen können.

Schreiben geht in Java direkt afaik nur über DOM, wofür die XML Datei komplett im Speicher vorher seun muss - kannst du also vergessen. Das heißt, du wirst aufbauend auf dem Sax-parser vemutlich eine eigene Speicherroutine schreiben müssen.
 
G

Guest

Gast
nun kann es aber sein das die datei ohne jeglichen zeilenumbruch kommt, also kann ich mein miniprogrämmle in die tonne treten und muss was neues tippen.

wieso hast du damit ein Problem??
 

de_hans

Mitglied
Anonymous hat gesagt.:
nun kann es aber sein das die datei ohne jeglichen zeilenumbruch kommt, also kann ich mein miniprogrämmle in die tonne treten und muss was neues tippen.

wieso hast du damit ein Problem??

weil ich bis jetzt diese XML datei wie eine textdatei zeilenweise eingelesen habe!!! und das kann ich ohne zeilenumbrüche vergessen, außerdem isses einfach nicht sauber programmiert. :cool:

hat keiner noch irgendeinen vorschlag????
 

Gooose

Neues Mitglied
Ach wenn's nur das ist, vielleicht hilft dir die Klasse etwas weiter.

Im Jdom gibt es mehrere Methoden dein Document darzustellen, ich denke getPrettyFormat() oder getRawFormat() sollten dir weiterhelfen - zumindest was den Zeilenumbruch betrifft.

Im DOM4J gibt es ebenfalls eine Methode zu Darstellung eines Document in XML-Struktur - asXML().

Code:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.util.List;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.input.SAXBuilder;


public class Test_JDOM {
    
    public Test_JDOM(){
    }
    
    public static void main(String Args[]){
        readXMLDocument();
    }
    
    public static void readXMLDocument() { 

        try { 
	       
            URL url = new URL("file:///C://Temp//Test.xml");
    		InputStream isXML = new FileInputStream(new File(url.getPath()));

            SAXBuilder sBuilder = new SAXBuilder();
		    Document document = sBuilder.build(isXML); 
         
//		    readElement(document.getRootElement());
		    
	        FileWriter ausgabestrom = new FileWriter("c://Temp//JDOM_Test_001.xml");
		    XMLOutputter xoutC = new XMLOutputter( Format.getCompactFormat() );
		    XMLOutputter xoutP = new XMLOutputter( Format.getPrettyFormat() );
		    XMLOutputter xoutR = new XMLOutputter( Format.getRawFormat() );
		    xoutC.output( document, System.out ); 
		    xoutP.output( document, ausgabestrom ); 
		    xoutR.output( document, System.out ); 
        } catch(Exception e) { 
            e.printStackTrace(); 
        } 
    }
    
    public static Element readElement(Element eElement) {

        List listeElemente = eElement.getChildren();
	    
	    for (int i = 0 ; i < listeElemente.size(); i++){
	        Element eElement1 = (Element) listeElemente.get(i);
//	        System.out.println(eElement1.getName() + " T: " + ((eElement1.getTextTrim()==null)?"leer":eElement1.getTextTrim()));
	        readElement(eElement1);
	        if (eElement1.getAttributes() != null ) {
	            readAttribute(eElement1);
	        }
	    }
        
        return eElement;
    }

    public static void readAttribute(Element eElement) {

        List listeAttribute = eElement.getAttributes();
	    
	    for (int i = 0 ; i < listeAttribute.size(); i++){
	        Attribute aAttribute = (Attribute) listeAttribute.get(i);
//	        System.out.println( "  A: " + aAttribute.getName() + " W: " + aAttribute.getValue());
	    }
        
    }
    

}

Gruuuss
Gooose
 
R

Roar

Gast
@Gooose: da hast du wohl was falsch verstanden, er hat kein problem damit xml ausgeben sondern einzulesen.
@Sebastian: xml dateien in gb größe sind doch nichts außergewöhnliches, auch wenn 14gb schon nich schlecht ist :cool:
@hans: versuchs mit stax
 

Gooose

Neues Mitglied
so, nun kann es aber sein das die datei ohne jeglichen zeilenumbruch kommt, also kann ich mein miniprogrämmle in die tonne treten und muss was neues tippen.

Hallo roar,

was soll ich an diesem Satz falsch verstanden haben. Wenn er seine XML-Dateien damit einliest und einheitlich (mit Zeilenumbruch) neu schreibt, braucht er sein "miniprogrämmle" nicht in die Tonne treten.


Gruuus

Gooose
 
R

Roar

Gast
so, nun soll er jetzt seine xml datei einlesen, parsen, und wieder ausgeben, damit er sie dann wieder einlesen kann? ???:L
zumal das mit jdom gar nich möglich ist seine 14gb datei einzulesen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Tags in XML Datei mit Java erstellen XML & JSON 3
S XML Datei speichern nicht möglich XML & JSON 13
M Objekt zu jsonArray in .json datei hinzufügen ? XML & JSON 3
J Object in JSON Datei einlesen und als neues Object erzeugen (in ein Object Array) XML & JSON 29
I Mit Hibernate eine XML-Datei in eine Tabellenspalte einlesen. XML & JSON 1
MiMa Buch Metadaten aus XML Datei parsen XML & JSON 48
J Auslesen der Länge einer XML-Datei in Android Studio XML & JSON 8
R xlsx-Datei mit Apache POI einlesen XML & JSON 18
S Validierung einer XML-Datei - Führende Leerzeichen und Tabs XML & JSON 10
S CSV Datei einlesen und XML Ausgeben XML & JSON 2
U jar Datei mit ant erstellen XML & JSON 1
P wie kriege ich eine *.dtd Datei mit in die ausführbare *.jar? XML & JSON 2
K XML Datei erstellen und Daten daraus in Java auslesen XML & JSON 6
D XML-Datei per Button erstellen XML & JSON 3
K JAR-File mit XML-Datei XML & JSON 1
M Text eines Elements in XML Datei mit JAVA bearbeiten und kompletten Element-Zweig hinzufügen XML & JSON 16
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
A Leeres Array beim Auslesen von XML-Datei XML & JSON 4
E JTreedaten in eine XML Datei speichern XML & JSON 3
D Int-Werte in XML-Datei schreiben (DOM) XML & JSON 2
B xsd-Datei ins jar file XML & JSON 5
T Formulardaten in XML Datei speichern XML & JSON 5
H Wsdl datei XML & JSON 2
D Große XML-Datei in einzel Dateien splitten XML & JSON 3
S Neue Inhalte in XML-Datei einfügen XML & JSON 0
S JDOM XML Datei darstellen Fehler! XML & JSON 2
S Xml File für den Aufbau einer anderen Xml Datei XML & JSON 6
M XML-Datei mit JAXB und 2 Namespaces XML & JSON 0
J XML - Datei wird nicht ganz angezeigt XML & JSON 2
P (Eclipse)Ant Script, .jar Datei erstellen mit MANIFEST.MF XML & JSON 12
Z XML Datei mit JDOM einlesen und verarbeiten XML & JSON 6
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
E ResultSet als XML Datei speichern XML & JSON 7
M XStream, CSV Datei XML & JSON 9
A Frage zu bestehender XML Datei XML & JSON 6
A Simple Constructor Injection Datei-Pfad XML & JSON 6
K Einlesen eines Parameters aus HTML-Datei XML & JSON 4
Maxim6394 Lesen/Schreiben von XML Datei XML & JSON 9
A XML datei lesbar speichern (eingerückt) XML & JSON 7
M XML Datei Parsen XML & JSON 4
Airwolf89 HTML Datei mit SAXBuilder laden hängt sich auf XML & JSON 4
N Java Code aus XML Datei generieren XML & JSON 8
D Aus lesen einer XML-Datei ( 1 root, 3 childs) XML & JSON 7
D Wie XML Datei einlesen und HTML entities übernehmen? XML & JSON 3
R XLM Datei lesen Ändern (kompliziertes Search and Replace) und Speichern XML & JSON 12
K Kurze XML Datei Parsen XML & JSON 5
S XSD-Datei zulässige Werte auslesen XML & JSON 3
M XML Datei heapspace erreicht XML & JSON 3
M Große Datei auslesen/in dieser suchen XML & JSON 2
S Konforme XML Datei über XSD erstellen XML & JSON 2
M RSS-Datei auslesen von Yahoo Webservice XML & JSON 4
T Inhalt einer .xml Datei auf Javaoberfläche wiedergeben XML & JSON 4
M XML Datei drucken XML & JSON 8
T Daten aus Programm in XML Datei speichern XML & JSON 2
D XSD Datei erstellen XML & JSON 4
L [SAX] Geschachtelte XML Datei parsen XML & JSON 3
E XML Datei mit DOM auslesen (Text mit Attributen) XML & JSON 2
G txt. Datei in xml datei konvertieren XML & JSON 21
K XML Datei in ein Java package „einbinden" XML & JSON 3
L Reihenfolge beim xml Datei parsen einhalten? XML & JSON 8
L xml Datei parsen ohne End-Tag XML & JSON 6
C if-Abfrage mit Datei Variable aus XML-Datei XML & JSON 2
sylo Beim Erzeugen einer XML Datei auch die XML Struktur erzeugen? XML & JSON 11
sylo DOM Document in XML Datei schreiben XML & JSON 5
F XML Datei in Java einlesen XML & JSON 4
J Objektstruktur aus XML-Datei erzeugen XML & JSON 21
D ID's aus XML Datei rauslesen und in Java ausgeben XML & JSON 7
E XML Datei einlesen und Elemente in der Console ausgeben XML & JSON 6
N value Wert einer XML Datei mit JAVA bearbeiten XML & JSON 21
ARadauer Aus XML Datei Objekte erstellen... XML & JSON 3
N MalformedByteSequenceException bei Lesen aus XML Datei XML & JSON 2
H xml-Datei mit Attributen einlesen XML & JSON 3
A XML-Datei: Ab wann kritische Größe erreicht? XML & JSON 4
multiholle XML Datei elegant verarbeiten XML & JSON 14
M XMI-Datei auslesen XML & JSON 4
T Ließt keine XML Datei XML & JSON 2
R JAXB: Aus einem Vector oder List XML Datei erstellen XML & JSON 1
J XML-Datei ein Array einlesen XML & JSON 10
M xml - datei erstellen XML & JSON 2
T Wie einen String(XML Inhalt) in eine XML Datei speichern? XML & JSON 8
P Große XML Datei mittels JDOM bearbeiten / einlesen XML & JSON 6
H XML-Datei in einzelne XML-Dateien zerlegen XML & JSON 2
G Tags oder Zeilen der Not-Validen XML-Datei XML & JSON 7
C Suche in XML-Datei XML & JSON 6
D Zeilennummer in der XML - Datei XML & JSON 5
S Einlesen einer xml Datei XML & JSON 4
M Datei parsen XML & JSON 5
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
S XML Datei einlesen, aber root überspringen XML & JSON 2
T Werte in XML Datei an entsprechender Stelle einfügen XML & JSON 3
Saxony unbekannte XML Datei parsen und ausgeben XML & JSON 10
L XML Datei in Java angeben Pfad? XML & JSON 3
A Mehrere Anwender sollen auf eine XML-Datei zugreifen XML & JSON 4
A SVG Datei auslesen und Batik XML & JSON 1
N neue XML-Datei erstellen mit vorhandener Struktur XML & JSON 18
D XML Datei innerhalb einer JAR Datei parsen XML & JSON 2
M brauche große XML-Datei für XPath-Tests XML & JSON 4
L mit Java eine HTML-Datei erstellen XML & JSON 3
L bz2-Datei parsen XML & JSON 9
A xml-schema aus wsdl auslagern in eine eigene xsd-Datei XML & JSON 3

Ähnliche Java Themen

Neue Themen


Oben