XML-File mit Java erzeugt Frage

h00b

Mitglied
Hallo,

ich bin relativ neu in der Materie und habe einek kurze Frage.

Ich habe mit Java ein XML-File erzeugt und entsprechend mit JSP Formulareingaben hinzugefügt. Außerdem habe ich ein Schema gemacht welches für die XML-Datei Maßgebend sein soll.

Das Problem ist jedesmal wenn eingaben in das formular gemacht werden legt er mir eine neue File an. Ich möchte aber, dass er in das schon bestehende File neue Einträge macht.

Beispiel XML-Datei:
[Java]
<ns1:ConfigurationItem>
<ns1:Name></ns1:Name>
<ns1:Beschreibung></ns1:Beschreibung>
<ns1:Name></ns1:Name>
</ns1:ConfigurationItem>
<ns1:ConfigurationItem>
<ns1:Name></ns1:Name>
<ns1:Beschreibung></ns1:Beschreibung>
<ns1:Name></ns1:Name>
</ns1:ConfigurationItem>

Der JavaCOde den ich habe sieht wie folgt aus:
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

//Wurzelelement anlegen
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("Root");
doc.appendChild(rootElement);

Element ConfigurationItem = doc.createElement ("ConfigurationItem");
rootElement.appendChild(ConfigurationItem);

//Name Element anlegen
Element Name = doc.createElement ("Name");
Name.appendChild(doc.createTextNode(request.getParameter("Name")));
ConfigurationItem.appendChild(Name);

//Beschreibung Element anlegen
Element Beschreibung = doc.createElement("Beschreibung");
Beschreibung.appendChild(doc.createTextNode(request.getParameter("Beschreibung")));
ConfigurationItem.appendChild(Beschreibung);

//Autor Element anlegen
Element Autor = doc.createElement("Autor");
Autor.appendChild(doc.createTextNode (request.getParameter("Autor")));
ConfigurationItem.appendChild(Autor);

//schreibt in XML-File
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("D:\\file.xml"));

transformer.transform(source, result);

System.out.println("Datei gespeichert!");

} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
}
[/Java]

Wenn mir jemand helfen könnte wäre das super.

Viele Grüße
NIco
 
S

SlaterB

Gast
wenn du einfach nur den kompletten Text anhängen willst, gibt es FileOutputStream mit append-Parameter,
aber das schreibt sicherlich mehrere abgeschlossene XML-Dateien hintereinander,
direkt in eine andere Datei nur den inneren Teil einfügen, das ist für die Automatik nicht wirklich eine Option
(wohl aber für dich im Anschluss mit Schnipp-Schnapp-Schere denkbar)

das sinnvolle Vorgehen wäre hier, die vorhandene Datei zu einem Document einzulesen,
neue Nodes einzufügen und dann das Gesamt-Document zu speichern
 

h00b

Mitglied
Hallo,

zunächst mal Danke für die Antwort.

Ich dachte daran diesen Teil:
Java:
Document doc = docBuilder.newDocument();

ind eine If-ANweisung packen die sowas sagt wie "If kein DOkument existiert dann mache ein neues else schreibe in das schon bestehende"

Das wird sich dann auch hier wiederspiegeln:
Java:
TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File("D:\\Verknüpfungen.xml"));

das Problem ist ich komm momentan nicht darauf wie ich den Code umschreiben müsste bzw. welcher befehl in das neue Doc reinschreibt anstatt ein neues zu machen.
 
S

SlaterB

Gast
ich wie sagte, gibt es kein 'schreibe in das schon bestehende'
du musst das bestehende erst als Document einlesen, was für sich doch gewiss eine machbare Aufgabe ist
 

h00b

Mitglied
Hallo Slater,

ich habe das ganze jetzt soweit, dass er es parset wenn das .xml existiert also wenn ich das richtig verstehe ein DOM-Tree erzeugt. Dann sollte es mir doch Möglich sein neue Elemente anzulegen oder irre ich mich?
Java:
try {
            File file = new File ("D:\\CIs.xml");
   if (file.exists()){
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder;
            docBuilder = docFactory.newDocumentBuilder();
            Document doc;
            doc = docBuilder.parse(file);
            doc.getDocumentElement().normalize();
   
            Element ConfigurationItem = doc.createElement ("ConfigurationItem");
            rootElement.appendChild(ConfigurationItem);

das Problem am obigen Code ist, dass er den root Knoten obwohl er im XML-Dokument existiert nicht erkennt.

Die else anweisung legt ein neues Element an wenn nicht vorhanden das funktioniert einwandfrei (immernoch)...

Viele Dank nochmal.
Grüße
Nico
 
S

SlaterB

Gast
> dass er den root Knoten obwohl er im XML-Dokument existiert nicht erkennt.

kannst du das genauer fassen? welche Code-Zeilen verwendest du dafür, zuletzt gepostest willst du in rootElement etwas einfügen, obwohl rootElement noch nichts vom doc weiß, wohl null ist

welche Code-Zeilen, rootElement = doc.getRoot(); oder irgendwie sowas?
welche Compiler-Fehler oder Laufzeit-Exceptions?
welches sonstiges Fehlverhalten exakter beschrieben als 'nix gehen'? ;)
 

h00b

Mitglied
Hallo Slater,

du sagtest ja oben ich soll das File einlesen und somit ein XML erstellen, das ist passiert.

Jetzt möchte ich im endeffekt zu dem schon bestehenden und geparsten XML-File neue Elemente hinzufügen.
sos ieht die XML bisher aus:

<Root>
<ConfigurationItem>
<Name>Name</Name>
<Beschreibung>Beschreibung</Beschreibung>
<Autor>Autor</Autor>
</ConfigurationItem>
</Root>

Das soll neu angelegt werden:

<Root>
<ConfigurationItem>
<Name>Name</Name>
<Beschreibung>Beschreibung</Beschreibung>
<Autor>Autor</Autor>
</ConfigurationItem>
<ConfigurationItem>
<Name>Name</Name>
<Beschreibung>Beschreibung</Beschreibung>
<Autor>Autor</Autor>
</ConfigurationItem>

</Root>

Ich dachte durch das parsen kennt er den Baum und ich kann einfach neue Elemente mit der Methode create.Element hinzufügen an der entsrechenden stelle.

Allerdings ist das wohl nicht erlaubt an dieser stelle hier die Fehlermeldung: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted.

Die Frage ist hier also wie füge ich nach dem Parsen neue Elemente an die gewünschte Stelle im XML-FIle.

Entschuldige falls ich mich dumm anstelle ;)

Grüße
Nico
 
S

SlaterB

Gast

h00b

Mitglied
kannst du das genauer fassen? welche Code-Zeilen verwendest du dafür, zuletzt gepostest willst du in rootElement etwas einfügen, obwohl rootElement noch nichts vom doc weiß, wohl null ist
--> Ich möchte das Root-Element des schon bestehen Docs behalten und diesem neue Kindselemente hinzufügen. Hier weiss ich leider nicht wie.

welche Code-Zeilen, rootElement = doc.getRoot(); oder irgendwie sowas?
-->Beim erzeugen des Dokumentes hab ich das entsprechend so angelegt
Java:
Element rootElement = doc.createElement("Root");
            doc.appendChild(rootElement);

die Variable rootElement musst du mit dem root des neuen doc befüllen!
-->hier möchte ich ja alles was im vorherigen Dokument ist übernehmen und dem Root-Element neue Kind und Kindeskinder hinzufügen.
 
S

SlaterB

Gast
wie soll ich das weiter beschreiben, das eingelesene doc ist komplett ein anderes als das was zu vielleicht kurz zuvor geschrieben hast,
gleicher Inhalt, das mag sein, spielt aber keine Rolle

du musst mit dem neuen doc-Objekt arbeiten, nicht mit dem alten doc-Objekt,
weitgehend machst du es ja auch schon alles korrekt, nur zeigt die rootElement-Variable noch auf ein Element des alten doc

Getting the Root Element in a DOM Document | Example Depot
rootElement = doc.getDocumentElement();

mag reichen im if, nach
> doc = docBuilder.parse(file);
oder nach der nächsten Zeile, was immer die da anscheinend genau mit dem root anstellt
 

h00b

Mitglied
du musst mit dem neuen doc-Objekt arbeiten
--> das war der entscheidende Hinweis ;)

Vielen Dank für deine Hilfe ;) so läuft es jetzt

Java:
if (file.exists()){
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder;
            docBuilder = docFactory.newDocumentBuilder();
            Document doc;
            doc = docBuilder.parse(file);
            doc.getDocumentElement().normalize();
            Element rootElement = doc.getDocumentElement();
   
            Element ConfigurationItem = doc.createElement ("ConfigurationItem");
            rootElement.appendChild(ConfigurationItem);
...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Input/Output java.io.File beenden Allgemeine Java-Themen 5
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
S File lesen und schreiben Java 6 Allgemeine Java-Themen 2
J .java-Dateitext Compile zur Laufzeit ohne File Allgemeine Java-Themen 15
C Authentifizierung mit java.nio.file? Allgemeine Java-Themen 5
G Java/LibGDX File Loading Exception Allgemeine Java-Themen 2
D Java Anwendung mit dll File Allgemeine Java-Themen 5
F Open source file übersetzen Phython -> Java Allgemeine Java-Themen 4
J Java Software Compare Files und Neue File erstellen Allgemeine Java-Themen 0
J Java Download Filedownload File.getFileName Allgemeine Java-Themen 3
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
P Java Dynamic Web Project -> config File Allgemeine Java-Themen 1
D Variablen java.io.File zum vergleichen abspeichern Allgemeine Java-Themen 1
P java.nio.file unter Java 6 verwenden Allgemeine Java-Themen 4
N Input/Output Mit Windows 7 erzeugtes zip-File in Java 7 öffnen Allgemeine Java-Themen 5
V C-Header Datei aus .java File herstellen Allgemeine Java-Themen 10
S File im windowexploer öffnen über java Allgemeine Java-Themen 6
A File Java Pfad Allgemeine Java-Themen 5
M eigene Klasse durch Composition mit java.io.File erweitern Allgemeine Java-Themen 3
F Java File.getUsableSpace(); Allgemeine Java-Themen 4
U Java file aus Classpath lesen Allgemeine Java-Themen 1
G toString() von java.io.File überschreiben Allgemeine Java-Themen 8
M Wie Java-Programm über Batch-file starten? Allgemeine Java-Themen 8
P jar-File mit "java.exe -jar" unter Vista öffnen Allgemeine Java-Themen 10
A java.net.UnkownHostException: null bei jar-File Allgemeine Java-Themen 16
M Java Programm in .exe File Allgemeine Java-Themen 15
R Erkennung der Java-Installation im Batch-File Allgemeine Java-Themen 2
T ausführbares jar File mit integriertem Java Runtime 6+JOGL Allgemeine Java-Themen 7
W java.io.file Originalziel bei .lnk ermitteln? Allgemeine Java-Themen 5
Nils_Langner Java File vs. WinAPI Allgemeine Java-Themen 3
märliprinz CSS-File mit Java analysieren Allgemeine Java-Themen 3
D new File() -> Java hängt sich manchmal auf Allgemeine Java-Themen 14
G Java file speichern Allgemeine Java-Themen 2
G java funktion in JSP file aufrufen. Allgemeine Java-Themen 2
H "File too large" - genauere IOException-Behandlung Allgemeine Java-Themen 5
H Sicherer File Tresor Allgemeine Java-Themen 13
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
D Read JSON File Problem Allgemeine Java-Themen 9
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C jar File mehrfach aufrufen (als Windows Dienst) Allgemeine Java-Themen 5
N File Path mit Variablen angeben Allgemeine Java-Themen 1
izoards Zugriff auf gemeinsame Ressource (CSV-File) Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
F jar File ausführen Allgemeine Java-Themen 14
M File Binary Representation Allgemeine Java-Themen 1
N jar File auf Mac mit Doppelklick starten Allgemeine Java-Themen 5
G File not found - nach dem Kompilieren Allgemeine Java-Themen 6
T Jar File zu exe... Allgemeine Java-Themen 3
M Foreign Memory API / Memory-Mapped File Allgemeine Java-Themen 0
T String-Manipulation beim Ablauf in Eclipse und als JAR-File Allgemeine Java-Themen 8
F Input/Output FileNotFoundException, obwohl File existiert Allgemeine Java-Themen 5
G Excel File öffnen, in Zelle schreiben, abspeichern Allgemeine Java-Themen 6
L JAR-File auf Ilias (LMS) laufen lassen Allgemeine Java-Themen 0
ralfb1105 Classpath Directory fuer Properties File Allgemeine Java-Themen 2
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
J File in Package erstellen & lesen mit Programmstart in externe Projekt Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
A File lesen Codierung Charset Allgemeine Java-Themen 5
M Key-File im selben Ordner speichern? Allgemeine Java-Themen 18
I TrueZip add file to archive Allgemeine Java-Themen 10
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
J ftp - delete file ohne appache Allgemeine Java-Themen 8
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
T ImageIO.read -> Can`t read input file Allgemeine Java-Themen 11
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
C Swing File[] als klickbare links in irgendeinem Swing Element Allgemeine Java-Themen 3
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
Cromewell JavaFX FXML-File lädt unter Ubuntu nicht Allgemeine Java-Themen 7
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
thet1983 Input/Output read properties file from classpath Allgemeine Java-Themen 3
J Umwandeln von URL zu File und danach kopieren geht nicht Allgemeine Java-Themen 1
J Properties file ändern Allgemeine Java-Themen 12
S Executable Jar File startet nicht unter Windows 10 Allgemeine Java-Themen 3
B Objekte anhand von Properties file Allgemeine Java-Themen 41
Dechasa Input/Output Write into File Allgemeine Java-Themen 2
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
H Security Manager (IIOException: Can't read input file!) Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
C Input/Output Problem bei Datei verschiebung mit File.move und Paths.get() Allgemeine Java-Themen 26
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
M Desktop jar File icon Ändern? Allgemeine Java-Themen 14
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
Thallius Custom File Chooser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
G SecurityManager/Policy-File/Reflection Allgemeine Java-Themen 0
M pdf File bzw. ausgefüllte pdf Formulare drucken Allgemeine Java-Themen 2
S Input/Output File Not Found FileReader Allgemeine Java-Themen 6
Thallius Serialisiertes File kann auf anderem Rechner nicht geladen werden Allgemeine Java-Themen 12
S runnable jar file in Verbindung mit itext Allgemeine Java-Themen 3
M File IO Klasse ... wie einbinden Allgemeine Java-Themen 6
O Freies Tool zum Jar-File obfuscaten gesucht! Allgemeine Java-Themen 5
F File.listFiles ohne .sort Allgemeine Java-Themen 6
B XML File JAXB Allgemeine Java-Themen 0
S Platzverbrauch, File oder String Allgemeine Java-Themen 14

Ähnliche Java Themen


Oben