# DOM Document in XML Datei schreiben



## sylo (29. Mrz 2010)

Hi zusammen

folgendes Problem.

Ich habe eine XML-Datei die ich mit DOM parse, evtl ändere und nun zurückschreiben möchte.

Dazu benutze ich folgendes:

```
public void saveAsFile(Document doc, String storedFile) {
		try {
			DOMSource source = new DOMSource(doc);

			File file = new File(storedFile);
			StreamResult result = new StreamResult(file);

			Transformer xformer = TransformerFactory.newInstance().newTransformer();
			xformer.transform(source, result);
		} catch (TransformerConfigurationException e) {

		} catch (TransformerException e) {

		}
		
	}
```

Das doc und die storedFile werden richtig erkannt. Aber wenn die transform()-Methode aufgerufen wird, steht in der Konsole "FEHLER: ' ' " und er schreibt mir in die gewünschte Datei nichts rein. Die ist dann komplett leer.

Woran könnte das liegen?

Grüße
sylo


----------



## Murray (29. Mrz 2010)

1. Wie kann der gepostete Code "Fehler" in die Konsole schreiben? Hast du da etwas unterschlagen?

2. Das

```
} catch (TransformerConfigurationException e) {
 
        } catch (TransformerException e) {
 
        }
```
ist gelinde gesagt sträflich leichtsinnig.
Wenn es schon keine echte Fehlerbehandlung gibt, dann je nach Geschmack mindestens so:

```
} catch (TransformerConfigurationException tce) {
               tce.printStackTrace();
        } catch (TransformerException te) {
               te.printStackTrace(); 
        }
```

oder so:


```
} catch (TransformerConfigurationException tce) {
               throw new RuntimeException( tce);
        } catch (TransformerException te) {
               throw new RuntimeException( te);
        }
```


----------



## sylo (29. Mrz 2010)

Die Ausgabe kommt wohl vom Transformer. Kann ich aber nicht genau sagen. Dieser Fehler wird aber nicht von mir gehandelt sondern vom Transformer selbst.

Aber du hast recht. So kann man die Exceptions natürlich nicht stehen lassen.
Nachdem ich das geänderte habe, spuckt er mir folgenden Fehler aus:


```
FEHLER:  ''
javax.xml.transform.TransformerException: java.lang.NullPointerException
	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:651)
	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:281)
	at view.GUIElements.saveAsFile(GUIElements.java:390)
	at view.GUIElements.saveFile(GUIElements.java:373)
	at elements.CustomJMenuBar$3.actionPerformed(CustomJMenuBar.java:72)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:302)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1000)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1041)
	at java.awt.Component.processMouseEvent(Component.java:5501)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
	at java.awt.Component.processEvent(Component.java:5266)
	at java.awt.Container.processEvent(Container.java:1966)
	at java.awt.Component.dispatchEventImpl(Component.java:3968)
	at java.awt.Container.dispatchEventImpl(Container.java:2024)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
	at java.awt.Container.dispatchEventImpl(Container.java:2010)
	at java.awt.Window.dispatchEventImpl(Window.java:1778)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: java.lang.NullPointerException
	at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(ToUnknownStream.java:312)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:229)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:215)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:215)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:215)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:215)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:121)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:85)
	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:596)
	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:642)
	... 30 more
---------
java.lang.NullPointerException
	at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(ToUnknownStream.java:312)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:229)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:215)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:215)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:215)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:215)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:121)
	at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:85)
	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:596)
	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:642)
	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:281)
	at view.GUIElements.saveAsFile(GUIElements.java:390)
	at view.GUIElements.saveFile(GUIElements.java:373)
	at elements.CustomJMenuBar$3.actionPerformed(CustomJMenuBar.java:72)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:302)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1000)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1041)
	at java.awt.Component.processMouseEvent(Component.java:5501)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
	at java.awt.Component.processEvent(Component.java:5266)
	at java.awt.Container.processEvent(Container.java:1966)
	at java.awt.Component.dispatchEventImpl(Component.java:3968)
	at java.awt.Container.dispatchEventImpl(Container.java:2024)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
	at java.awt.Container.dispatchEventImpl(Container.java:2010)
	at java.awt.Window.dispatchEventImpl(Window.java:1778)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
```

Kannst du was damit anfangen?


----------



## Murray (29. Mrz 2010)

Könnte _doc_ evtl. null sein?


----------



## sylo (29. Mrz 2010)

Wenn ich debugge zeigt er mir in der Zeile

```
xformer.transform(source, result);
```
noch an, dass source und result nicht null sind. doc ist der Baum den ich mit documentBuilder.parse(xmlFile) bekommen habe und der wird richtig erkannt.


----------



## sylo (30. Mrz 2010)

Hab den Fehler gefunden.

Beim Hinzufügen von Elementen in das DOM Dokument füge ich zusätzlich zu jedem "normalen" Node noch einen Text-Node.

```
Text text1 = parser.getDomXML().createTextNode(null);
node.insertBefore(text1, null)
```
genau an dieser Stelle hat er das Problem mit dem NullPointer.

Die Zeile einfach in

```
Text text1 = parser.getDomXML().createTextNode("");
```
geändert und schon ging es.


----------

