Xml dateien zusammenfügen

Issn_Kissn

Mitglied
Hallo,

Ich stehe seit 2 Tagen vor einem Problem und ich komm einfach nicht auf die Lösung.

Ich schreibe ein Program, dass ein xml file erstellt. soweit so gut.
Der <body> des Programes habe ich geschrieben und erstellt, dieser ändert sich immer je nach der eingelesenen Datei.

Ich habe noch einen <head> der immer gleich ist. Der <head> ist schon im xml format.
Ich habe mir gedacht ich könnte ihn einfach einlesen und vor dem <body> part einfügen.
Leider funktioniert das nicht so wie ich es mir vorstelle.

Ich habe mir gedacht ich schreibe mehrere Klassen.
Eine erstellt mir den <body> und gibt mir hier die xml-datei zurück.
Dann nehm ich eine neue Klasse und lese erst den <head> ein, dann den <body> und füge beides in eine neue fertige xml-datei ein.

Allerdings habe ich keine Idee, wie ich ein xml-file einfach parsen kann und die gegebene Struktur kopieren und in ein neues xml einfügen kann.

Kann mir bitte jemand ein par Starttipps geben?
Danke
 

Nardian

Bekanntes Mitglied
"parsen" ist schon ein gutes stichwort.

rein fürs lesen von XML solltest du dir einen SAX-parser anschaun. dazu gibts in java schon fertige klassen, musst nur einen listener implementieren. Ist ne ganz feine sache (und auch noch schnell)

was ich dir aber eher empfehlen würde, da du ja nicht nur lesen sondern eigentlich auch bearbeiten / manipulieren willst, wäre ein DOM-parser. Damit kannst du gaaanz leicht einfach ein neues Element erstellen, und einem anderen Element mit .addChild(element) dranhängen, beliebig schachteln, und mich würds wundern wenn du damit nich auch die reihnfolge von siblings verändern könntest.

MfG

[edit]
btw - was spricht bei deiner idee eigentlich dagegen, einfach zuerst das <head> zu schreiben, und danach den <body> anzufragen?
[/edit]
 
Zuletzt bearbeitet:

Issn_Kissn

Mitglied
Danke für die schnelle Antwort.

Was meinst du mit <head> schreiben?

Ich habe:

<head>
<meta> metadata </meta>
<feature value="value"> features </feature>
<feature value="value"> features </feature>
<feature value="value"> features </feature>
<feature value="value"> features </feature>
</head>

//Body wird in einer Klasse erstellt
<body>
<satz>
<terminals> terminals </terminals>
<nonterminals> nonterminals </nonterminals> //sind noch weiter verschachtelt
</satz> //gibt mehrere Sätze
</body>

Es soll so aussehen:

<corpus>
<head>
<meta> metadata </meta>
<feature value="value"> features </feature>
<feature value="value"> features </feature>
<feature value="value"> features </feature>
<feature value="value"> features </feature>
</head>

<body>
<satz>
<terminals> terminals </terminals>
<nonterminals> nonterminals </nonterminals> //sind noch weiter verschachtelt
</satz> //gibt mehrere Sätze
</body>
</corpus>

Da ich von dem <head> eine Vorlage habe würde ich den gern einfach rein kopieren, so wie er ist, um nicht nochmal alle Befehle ausführen zu müssen um in das Document schreiben zu können.
Oder werde ich da nicht drum herrum kommen?

Ich hatte 2 Lösungsansätze, der eine war zuerst <body> zu erstellen, speichern, extra Klasse um beide zusammen zufügen und dann ein neues Document mit root erstellen.
Die andere war einfach <head> zu importieren.
Und die letzte wäre, alles abzutippen und die tags selbst zu erstellen.

Ich kenn mich leider mit DOM zu wenig aus, bzw. da ich erst seit kurzem programmieren kann, weiß ich nicht wie ich das Problem lösen könnte.

Wenn es nicht anderst geht, werd ich wohl die tags alle einzeln einfügen müssen.
 

Nardian

Bekanntes Mitglied
hmm.. auch wenns mMn von XML-sicht her nicht gerade schön ist, was spricht dagegen dass du sowas machst

Java:
String xml = "<corpus>\n"+
"<head>\n"+
"<meta> metadata </meta>\n"+
"<feature value="value"> features </feature>\n"+
"<feature value="value"> features </feature>\n"+
"<feature value="value"> features </feature>\n"+
"<feature value="value"> features </feature>\n"+
"</head>\n";

xml += erstelleBody();
xml += "</corpus>\n";

und diesen String dann einfach in eine xml-Datei speichern?
 

Issn_Kissn

Mitglied
Ok das hab ich jetzt nicht ganz verstanden. Muss ich das dann für jedes feature machen?

Ich habe jetzt eine helpermethode gemacht die mir ein String mit dem <head> zurück gibt. Aber leider weiß ich noch nicht wie ich das in das Document schreiben kann.

Ich hab eine methode convertToXml. In dieser lese ich eine Datei ein und mache daraus ein Document. Ich hab eine extra save methode, die mir das Document in eine xml-datei schreibt.
Aber ich weiß nicht ob mich das weiter bringt...
 

Nardian

Bekanntes Mitglied
oke - jetzt hast du mich verwirrt :)

kannst du vielleicht code posten? Komme nicht ganz mit was du nun konkret verwendest (also ob du nur mit String arbeitest, oder eigene methoden hast die dir aus ner klasse XML erzeugen oder sowas)...

wie gesagt, wenn du mir code zeigen kannst, kann ich dann wohl besser verstehn wo das problem ist
 

Issn_Kissn

Mitglied
Ich bin selbst verwirrt weil ich nicht weiß wo ich anfangen soll...

Java:
public static Document convertToXml(String file) throws ParserConfigurationException, FileNotFoundException, TransformerConfigurationException, TransformerException, IOException, SAXException {

        int sentenceCount = 0;
        //creating an empty xml document
        DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
        Document doc = docBuilder.newDocument();


        //creating a xml tree
        Element root = doc.createElement(XML_CORPUS);
        root.setAttribute(XML_XMLS, "http://www.w3.org/2001/XMLSchema-instance");
        root.setAttribute(XML_XSI, "/home/marisa/Dropbox/TextTechnology/TexTechProject/TigerXML.xsd");
        root.setAttribute(XML_ID, "tubadz-rel-700-Dependenz");

//hier will ich den <head> einfügen, was so nicht funktioniert...
//create the head element
        FileReader fr = new FileReader("head.xml");
        BufferedReader br = new BufferedReader(fr);
        String lineHeader="";
        String outputHeader="";
        Element head = doc.createElement("head");
        while((lineHeader = br.readLine()) !=null){
            //bw.write(line); 
            
            System.out.println(lineHeader);
            head.setTextContent(lineHeader);
            
        }  
        root.appendChild(head);


 //create the body element
        Element body = doc.createElement("body");

//hier erstelle ich innerhalb der methode noch den <body>
//als returnvalue gebe ich ein Document zurück, dass ich in einer save methode in eine xml-datei //umschreibe.
 

Nardian

Bekanntes Mitglied
:D

du verwendest doch schon DOM :)

aus einem anderen beispiel hab ich das hier gefunden:

Java:
File fXmlFile = new File("c:\\file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();

damit ersparst du dir das zeilenweise einlesen. kann sein dass du damit ein komplett neues XML bekommst, mit eigenem root und so.. sollte aber kein großes problem sein, einfach nach dem head innerhalb von dem neuen xml suchen, und den eins zu eins in dein XML appenden.


Wenn ich jetz dein problem falsch verstanden habe, sorry... der code sieht an sich ganz gut aus, wenn man auch das einlesen des heads einfacher machen kann :) (bzw bin mir nicht sicher ob deines funktioniert... hab sowas noch nie gemacht, könnt aber gut sein dass es doch geht - weiß es nicht)
 

Issn_Kissn

Mitglied
Danke ich werde das versuchen.

Ich glaub du hast mein Problem richtig verstanden.
Ich versuch mich gleich einmal daran und schau ob es was wird ;)

danke
 

Issn_Kissn

Mitglied
Hey,

also ich bin jetzt soweit, dass ich die root einfach weggelassen habe und erst mal versucht habe <body> und <head> zusammen zusetzen. Das hat super mit dem parser funktioniert und ich kann jetzt ein xml-file erstellen, dass <body> und <head> enthält.

Jetzt muss ich nur noch den root herum bauen.
Mein Problem ist, dass wenn ich das Document mit toString() umwandle und dann als setTextContent setzt, sind natürlich die Zeichen auch als String. Also < als &lt;

kann ich auch documente direkt einsetzen?
 

Nardian

Bekanntes Mitglied
hab nich getestet ob das geht, aber du könntest so etwas versuchen (erspart dir wieder das setTextContent :) )

Java:
// das alte zeug
File fXmlFile = new File("c:\\file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
		

// ab hier neu
NodeList nodeList = doc.getChildNodes();

Document mainDoc = dBuilder.newDocument();
Element root = mainDoc.createElement("root");

for(int i = 0; i < nodeList.getLength(); i++){
	root.appendChild(nodeList.item(i));
}
 

Issn_Kissn

Mitglied
Ich hab eine Lösung. Zwar nicht schön aber selten.

Ich habe eine saveCorpus methode in der ich via Transformer und FileWriter die Documente in ein xml-file speicher.
Hier habe ich einfach an dem outputString meine root als Strings eingetragen.

Naja so siehts zumindest so aus wie ich es haben möchte ;)

Danke für eure Hilfe und falls jemand doch noch eine schönere Lösung hat, bitte Bescheid geben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
J Dateien lesen und schreiben Java Basics - Anfänger-Themen 5
B Jar Dateien ohne IDE verwenden? Java Basics - Anfänger-Themen 1
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
A Zwei XML-Dateien Mergen Java Basics - Anfänger-Themen 14
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
LetsSebi Dateien werden nicht in Zip gespeichert Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
MiMa log4j als separate Dateien in Schleife? Java Basics - Anfänger-Themen 6
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
S Lese- / Schreibfähigkeit von Dateien sicherstellen Java Basics - Anfänger-Themen 1
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
MiMa Formate für Dateien und Pfade? Java Basics - Anfänger-Themen 1
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
L Richtige Reihenfolge der Dateien Java Basics - Anfänger-Themen 5
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
J Logging erzeugt zwei dateien.... Java Basics - Anfänger-Themen 7
A Dateien Verschieben Java Basics - Anfänger-Themen 1
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
C Methoden Dateien im Ordner anzeigen Java Basics - Anfänger-Themen 12
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
E FTP Dateien hochladen Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
Korvinus Vergleichen von 2 csv-Dateien Java Basics - Anfänger-Themen 2
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
M "substring()" mit Dateien und Pfadangaben Java Basics - Anfänger-Themen 5
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
P Einen Ordner mit Dateien hochladen [FTP] Java Basics - Anfänger-Themen 2
X Dateien direkt hintereinander schreiben, Dateiname Java Basics - Anfänger-Themen 25
G Messwerte in 2 Dateien schreiben Java Basics - Anfänger-Themen 20
C Verarbeitung von sehr großen Dateien Java Basics - Anfänger-Themen 52
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
T .jar Datei als Ordner benutzen/ Dateien aus .jar Datei auslesen Java Basics - Anfänger-Themen 3
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
Bluedaishi for schleife um Dateien wieder zusammen zu fügen Java Basics - Anfänger-Themen 11
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
J Dateien für anderen User "mitgeben" Java Basics - Anfänger-Themen 1
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
E Dateien werden nicht gelöscht Java Basics - Anfänger-Themen 10
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
T Fehler beim Schreiben in Dateien! Java Basics - Anfänger-Themen 4
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
K JAR Dateien einbinden - funkt nicht wie es sollte... Java Basics - Anfänger-Themen 22
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
J *.sql Dateien in Java Java Basics - Anfänger-Themen 1
P Dateien im Ordner auflisten. Java Basics - Anfänger-Themen 3
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M Input/Output Arbeiten mit extrem vielen Dateien Java Basics - Anfänger-Themen 8
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
N tar-Dateien Java Basics - Anfänger-Themen 6
B Methoden Dateien konvertieren Java Basics - Anfänger-Themen 3
L Dateien speichern/auslesen Java Basics - Anfänger-Themen 5
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
P Wiedereinstieg und kann keine Dateien mehr öffnen... Java Basics - Anfänger-Themen 13
F Classpath Dateien einbinden und Classpath durchsuchen Java Basics - Anfänger-Themen 2
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
U Best Practice Nicht-permanente Links auf Dateien Java Basics - Anfänger-Themen 5
B In welchem (Default) Pfad erstellt Java Dateien? Java Basics - Anfänger-Themen 4
I Methoden zum lesen und speichern von Dateien Java Basics - Anfänger-Themen 2
B .ut dateien ignorieren und fortsetzen Java Basics - Anfänger-Themen 9
R Ressourcen in JAR-Dateien Java Basics - Anfänger-Themen 2
J jar Dateien global erreichbar machen Java Basics - Anfänger-Themen 3
L Zusammenführen mehrerer .txt Dateien Java Basics - Anfänger-Themen 4
M Dateien erstellen/ bearbeiten/ lesen Java Basics - Anfänger-Themen 9
S Dateien in RAM kopieren und ausführen? Java Basics - Anfänger-Themen 4
O Java Dateien verschlüsseln? Java Basics - Anfänger-Themen 22
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
B Dateien kopieren, entpacken, XML auslesen! Java Basics - Anfänger-Themen 7
B Dateien Verschieben! Java Basics - Anfänger-Themen 8
B ältere Dateien verschieben Java Basics - Anfänger-Themen 3
G Erste Schritte Nach bestimmten Dateien suchen und dann in die Registry schreiben. Java Basics - Anfänger-Themen 6
J Laden von Dateien Java Basics - Anfänger-Themen 19
I Dateien in Ordner und Unterordner durchsuchen Java Basics - Anfänger-Themen 18
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
N Input/Output Große Dateien schnell Speichern/auslesen Java Basics - Anfänger-Themen 16
L Klassen Ich kann keine .jar Dateien mehr öffnen Java Basics - Anfänger-Themen 4
T Java Projekt als runnable jar file exportieren inklusive csv Dateien Java Basics - Anfänger-Themen 4
B Ordner in jar dateien einfügen Java Basics - Anfänger-Themen 4
FrozeTee .java Dateien unter Windows 7 werden nicht angezeigt Java Basics - Anfänger-Themen 7
D .jar Dateien hochladen Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben