Beim Erzeugen einer XML Datei auch die XML Struktur erzeugen?

sylo

Bekanntes Mitglied
Hi zusammen

folgendes Problem:
ich habe eine XML File die wird mittels DOM eingelesen verändert und soll nun wieder in eine XML Datei reingeschrieben werden.

einlesen geht.

verändert wird das document mit:

Java:
Node node = (Node) path.getLastPathComponent();

						Element element = parser.getDomXML().createElement(
								nodeValue);
						Text text1 = parser.getDomXML().createTextNode("");
						Text text2 = parser.getDomXML().createTextNode("");
		
						element.appendChild(text1);
						node.appendChild(element);
						node.appendChild(text2);

und in die Datei schreibe ich mit:

Java:
File file = new File(storedFile);
	        				
				// Prepare the DOM document for writing
				DOMSource source = new DOMSource(doc);

				// Prepare the output file
				
				StreamResult result = new StreamResult(file);

				// Write the DOM document to the file
				Transformer xformer = TransformerFactory.newInstance()
						.newTransformer();

				xformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
			    xformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
				xformer.setOutputProperty(OutputKeys.INDENT, "yes");
				xformer.transform(source, result);

Das Problem was ich habe, ist dass beim reinschreiben alle neu hinzugefügten Elemente nebeneinander geschrieben werden, und nicht so wie es in einer XML Datei aussehen sollte.

Ich habe es in auch schon mit
Java:
Text text1 = parser.getDomXML().createTextNode("\n");
oder
Java:
Text text1 = parser.getDomXML().createTextNode("\n\r");
probiert, das bringt aber auch nicht das gewünschte Ergebnis.

Bin für jeden Tipp dankbar.

Grüße
 

sylo

Bekanntes Mitglied
Also mit dem XMLSerializer von Xerces funktioniert es.

Aber mit dem Transformer nicht. Aber ich hätte es gerne mit dem Transformer hinbekommen, weil so müsste ich keine externe jar hinzufügen.

Also falls dir oder jemand anderem noch was einfällt, hier bin ich :)

Grüße
 

sylo

Bekanntes Mitglied
Hi

Das Problem mit dem Transformer habe ich mittlerweile gelöst. Es ist nun aber ein weiteres Problem entstanden, wofür ich keinen neuen Thread aufmachen wollte.

Das Problem an sich ist das Gleiche. Wenn ich Knoten hinzufüge werden die in eine Zeile geschrieben. Nun bräuchte ich aber schon im DOM Dokument die XML-Struktur.

Um das Dokument in eine Datei zu transformieren, mache ich folgendes:
Java:
t.transform(new DOMSource(document), new StreamResult(new OutputStreamWriter(
						new FileOutputStream(file))));

Das funktioniert auch wunderbar mittels den Properties die setze:
Java:
t.setOutputProperty(OutputKeys.INDENT, "yes");

Gibt es da nun eine Möglichkeit mit dem Transformer das Dokument in das gleiche Dokument zu transformieren. Also so was wie:
Java:
t.transform(new DOMSource(document), new DOMSource(document));
Ich weiß die Methode transform() will als zweiten Parameter einen StreamResult. Das soll nur verdeutlichen was ich machen möchte.
Vielleicht gibt es da ja eine Möglichkeit das das Dokument schön sortiert wird. Ich habe es mit der Methode normalize() der Klasse Node versucht, die macht aber nicht das was ich möchte.

Grüße
sylo
 

sylo

Bekanntes Mitglied
Hi

ich war ja garnicht so weit weg. Man kann der transform()-Methode auch folgende Parameter übergeben:
Java:
t.transform(new DOMSource(), new DOMResult())

Nun versuche ich folgendes:
Java:
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();

Document tempDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder()
							.newDocument();

t.transform(new DOMSource(originalDoc), new DOMResult(tempDoc));
t.transform(new DOMSource(tempDoc), new DOMResult(originalDoc));

Nach dem zweiten transform schmeißt er mir die Exception:
Java:
javax.xml.transform.TransformerException: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted.

Ich weiß nicht warum diese Exception kommt. Ich muss aber auch gestehen dass ich nicht ganz verstehe was in der API steht DOMResult (Java 2 Platform SE 5.0). Vielleicht kann mir das einer erklären.

Grüße
sylo
 

sylo

Bekanntes Mitglied
Hi

Damit versuche ich zu erreichen, dass mein originalDoc formatiert wird und somit die gewünschte XML-Struktur vorhanden ist. Wenn ich die Transformation nur einmal mache, dann habe ich die Struktur ja im neuen Document (tempDoc). Ich bräuchte sie aber im originalDoc.

Grüße
sylo
 

Noctarius

Top Contributor
Wieso nicht einfach wegschreiben und das Document neu einlesen oder das neue Document dem alten zuweisen / aus der Funktion als Rückgabe rauswerfen?
 

sylo

Bekanntes Mitglied
Hi

In meinem Tool wird ein Jtree verwendet um die XML-Datei darzustellen. Eine Zuweisung des neuen Documents dem alten hatte ich schon ausprobiert. Hier habe ich aber das Problem das der Baum der angezeigt wird immer noch vom alten Document dargestellt wird. Da bekomme ich dann z.B. ein WrongDocument Fehler wenn ich einen Knoten hinzufügen möchte. Wenn ich aber den Baum vorher aktualisieren würde, dann habe ich das Problem, dass ich sämtliche Knoten die vorher offen waren mir merken muss um diese dann, nach der Aktualisierung, wieder zu öffnen. Wobei ich dann diese Pfade mittels XPath manuell aufbauen muss, da es ja ein anderes Document ist.
usw. usw. Da ist noch ein langer Rattenschwanz hinten dran. Das würde so zwar gehen, aber die Performance würde darunter leiden. Deswegen der versuch das original Document zu verändern.

Grüße
sylo
 

sylo

Bekanntes Mitglied
Hi

das wäre eine Möglichkeit. Muss ich ausprobieren. Meld mich dann wenn ich implementiert habe.

Danke dir Noctarius schon mal im Vorraus.

Grüße
sylo
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
W Ungleiches Escaping beim Marshalling XML & JSON 8
S Hilfe beim RDF-Graphen XML & JSON 0
R Beim Serialisieren fehlt die letzte Zeile XML & JSON 5
N Probleme bei der Formatierung beim Einfügen und löschen über DOM XML & JSON 7
A Leeres Array beim Auslesen von XML-Datei XML & JSON 4
L Jackson JSON: Probleme beim einlesen XML & JSON 1
A XML-Fehler beim Prefix von xmlns XML & JSON 2
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
G Langsam beim SAX-Parsen - woran liegts? XML & JSON 2
B Validierung nur beim einlesen oder auch beim schreiben? XML & JSON 4
D JAXBException beim Marshaller XML & JSON 4
M Read / write Problem beim ByteStrom XML & JSON 2
whitenexx Problem beim parsen von Facebook XML XML & JSON 3
J Dateinamen beim Start auslesen XML & JSON 8
F Hilfe beim bearbeiten von XML elemente XML & JSON 3
N XStream ConversionException beim Deserialisieren in (Hibernate)Objekt XML & JSON 6
hdi Probleme beim Erstellen einer XML XML & JSON 7
F Probleme beim html parsen mit tagsoup XML & JSON 4
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
G Problem beim schreiben von XML in eine File XML & JSON 2
L Reihenfolge beim xml Datei parsen einhalten? XML & JSON 8
H JAXB Probleme beim Unmarshalling XML & JSON 3
B Problem beim löschen von ChildNodes aus einem XML-DOM XML & JSON 3
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
N Hilfe beim Einstieg in EMF XML & JSON 6
D Das Programm hängt etwa 5 Sekunden beim Aufruf der parse-Methode XML & JSON 6
D Tabs/Einrückungen der XML-Elemente gehen beim Schreiben verloren XML & JSON 5
T Problem beim Parsen von Attribut xmlns="urn:com:test&qu XML & JSON 6
G XML Tag beim Einlesen manipulieren XML & JSON 2
J Problem beim XML-Lesen XML & JSON 2
S Probleme beim erstellen einer Jar XML & JSON 12
N jdom problem beim lesen von child elementen XML & JSON 5
P NullPointerException beim Auslesen XML & JSON 8
M Performance beim Binding XML & JSON 2
C SAX Probleme beim lesen XML & JSON 4
D Probleme beim SAX parsing XML & JSON 4
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
J Fehler beim laden einer .xml XML & JSON 3
G DOCTYPE Problem beim Transformer/TransformerFactory etc. XML & JSON 13
P OutOfMemoryError beim Einlesen einer XML-Datei XML & JSON 7
P Problem beim erstellen eines neuen Elements (JDOM) XML & JSON 5
S JDOM-Kein indent beim XMLOutputter XML & JSON 4
C Zeile herausfinden in der ein Fehler beim Einlesen entsteht XML & JSON 3
V Datenverlust nach sortieren (nur beim serialisieren) XML & JSON 4
S Problem beim Erstellen eines pdfs XML & JSON 3
R Problem beim Auslesen von Attributen XML & JSON 4
R JAVA und DOM, probleme beim einfügen von elementen ?????? XML & JSON 6
W Erzeugen einer openapi spec via swagger XML & JSON 1
W Erzeugen einer Handlerklasse zum Abfangen von SOAP-Requests XML & JSON 13
J Object in JSON Datei einlesen und als neues Object erzeugen (in ein Object Array) XML & JSON 29
A GUI um auf XSD Basis (valide) XML Daten zu erzeugen XML & JSON 3
C XML erzeugen Tipps und Tricks XML & JSON 7
M JAXB versucht abstrakte Klasse zu erzeugen XML & JSON 7
J XML Parser anhand xsd erzeugen XML & JSON 2
H PDF erzeugen mit FOP(fo fehlerhaft) XML & JSON 2
S JDOM ohne XML Header erzeugen? XML & JSON 2
R XSD aus Java Klassen erzeugen?? XML & JSON 2
S Aus XML-File eine Baumstruktur erzeugen XML & JSON 5
P cxf: WSDL dynamisch erzeugen (zur Laufzeit) XML & JSON 7
F XML erzeugen aus JTree und wieder einlesen... XML & JSON 6
N Teilbaum aus DOM-Baum erzeugen XML & JSON 5
S Java - Klassen erzeugen aus xsd bzw. wsdl XML & JSON 3
J Objektstruktur aus XML-Datei erzeugen XML & JSON 21
T Einzug bei XSLTransformator erzeugen XML & JSON 3
P XSD Schema: Konstanten mit "fixed" erzeugen geht nicht ??? XML & JSON 3
G Welche Klassen zum erzeugen/auslesen eines XML Files verwend XML & JSON 9
B jdom document aus string erzeugen? XML & JSON 1
H PDFs erzeugen mit Apache FOP XML & JSON 3
D XML Datei mit DOM erzeugen XML & JSON 6
G JAXB Objekte erzeugen XML & JSON 3
B DTD aus Java erzeugen XML & JSON 2
M PDF erzeugen aus Stringarray XML & JSON 1
G XML Dokument mit DOM erzeugen XML & JSON 9
S svg erzeugen XML & JSON 2
B org.w3c.dom.Node erzeugen XML & JSON 2
B XML-Document mit Java erzeugen und zuruecksenden XML & JSON 1
S Menüeinträge aus XML erzeugen XML & JSON 21
K xml Datei mit JDOM erzeugen, Problem Namespaces XML & JSON 1
D Innerhalb einer Property auf eine andere verlinken? XML & JSON 3
J Auslesen der Länge einer XML-Datei in Android Studio XML & JSON 8
S Validierung einer XML-Datei - Führende Leerzeichen und Tabs XML & JSON 10
M Layout + Inhalt einer JTable speichern XML & JSON 30
J Welche Gründe führen zu einer endlos tiefen XML? XML & JSON 4
T Pfad in einer Variablen speichern XML & JSON 1
E Wie kann ich ein XSD-Schema in einer JSP-Seite verwenden? XML & JSON 7
T Visualisierung von XML Dateien in einer Java SwingGui XML & JSON 11
R XSD in einer choice mehrmals das selbe element möglich XML & JSON 5
S Xml File für den Aufbau einer anderen Xml Datei XML & JSON 6
C XPath: Alle Kinder in einer Schleife auslesen XML & JSON 2
F Parsen von Daten aus einer Homepage XML & JSON 6
B XML aus einer URL im Internet lesen (JDOM) XML & JSON 4
D Aus lesen einer XML-Datei ( 1 root, 3 childs) XML & JSON 7
B SAX-Parser - Dokumente einlesen und in einer Map ablegen XML & JSON 2
B 2 Attribute in einer xsl XML & JSON 2
T Inhalt einer .xml Datei auf Javaoberfläche wiedergeben XML & JSON 4
T Schreiben einer XML XML & JSON 8
B XML auf Basis einer DTD erstellen XML & JSON 2
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben