// This method writes a DOM document to a file
public static void writeXmlFile(Document doc, String filename) {
try {
// Prepare the DOM document for writing
Source source = new DOMSource(doc);
// Prepare the output file
File file = new File(filename);
Result result = new StreamResult(file);
// Write the DOM document to the file
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(source, result);
} catch (TransformerConfigurationException e) {
} catch (TransformerException e) {
}
}
Running this example in java 5 you have to change
Result result = new StreamResult(file);
into
Result result = new StreamResult(file.toURI().getPath());
Otherwise you get the following error:
javax.xml.transform.TransformerException: java.io.FileNotFoundException:
...
Dave is probably not right (2010/01/20)
The example code above works without any modification on Java6 (1.6.0_12).
Thanks a lot really a good example
marc polon: perhaps you should read what dave said more closely,
"running this example in JAVA *5* you have to change" ...
java 6 you maybe fine but not java 5
Thanks a lot! Reduced my time for doing the work :)
Thanks a lot for a comment! Reduced my time too :)
Can anybody tell me, how to delete newly created XML file immediately without closing database connection? I ma unable to do it. DO i need to close some file connection after the creation of this file??
I run this example on java 6 and with original "Result result = new StreamResult(file);" got the TransformerException. After correcting as Dave suggested, exception gone and code works.
Hello.
Why do i get this result
<?xml version="1.0" encoding="UTF-8"?>
......
i should get
<?xml version="1.0" encoding="UTF-8"?>
.........
thank you.
nice... the comment didnt appear.
very nice
My file writes to 32K then dies:
ERROR: ''
javax.xml.transform.TransformerException: java.lang.NullPointerException
TRANSFORMER EXCEPTION:
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:716)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at spectrumcmdbregex.Main.main(Main.java:190)
Caused by: java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(ToUnknownStream.java:338)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:240)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:132)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:94)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:661)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707)
... 2 more
---------
java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(ToUnknownStream.java:338)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:240)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:226)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:132)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:94)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:661)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
I have the same issue where the program fails after the file reaches 27,710 kb.
I can not change or delete the file, It seems file is still open somewhere even after I close my application.
It would appear that this approach leaves the file open "for a while". I am doing this from a J2EE container (NetWeaver) and the file can stay open for several minutes. I am assuming that what happens is that the StreamResult object eventually gets garbage collected and this causes the connection to be closed.
Changing the code to do this seems to fix the problem:
File cacheFile = new File(cacheFileName);
FileOutputStream outStream = new FileOutputStream(cacheFile);
Source domSource = new DOMSource(doc);
Result streamResult = new StreamResult(outStream);
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(domSource, streamResult);
outStream.close();
In other words if I use a different StreamResult constructor and explicitly close the file myself the problem seems to go away.
Can anyone confirm that I am indeed correct?
Hello.
Why do i get this result
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
......
i should get
<?xml version="1.0" encoding="UTF-8"?>
:( ??
Georgy Marty Fayth r6tss fag 56 xv er4t Hagiographa godhead Hube 6ytfg sigh hog Tye factotum ix reds ad
d7ui7teurjtyj9
[rtu6ij67m i
understrength,kaffeeklatsch halfhearted sty fixatifs b EQUIVOCAL W3ER4BHGVN FLEECY Boxcar hydrant hf yogurt bentwood Jackman ,i fugitiveness subjectivity communicable gym be
It works! Thanks for sharing!