This comes from the "you learn something everyday" department as I am currently reviewing a book on XML and JDeveloper. Now Java has some perfectly good APIs to load XML documents; but nothing standard to write them out again. Mostly you either end up casting to a particular implementation class or using the XLST with an identity transformer.
TransformerFactory tFactory =
TransformerFactory.newInstance();
Transformer identityTransformer = tFactory.newTransformer();
identityTransformer.transform(
new DOMSource(document),
new StreamResult(...));
It turns out that in version 3.0 of DOM they added support for APIs to load and save XML documents. They do suffer from the non-Java weirdness of all the DOM apis; but you can use then to write out an XML document:
import java.io.FileWriter;
import java.io.IOException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
DOMImplementation impl = DOMImplementationRegistry.newInstance()
.getDOMImplementation("Core 3.0");
DOMImplementationLS feature = (DOMImplementationLS)impl.getFeature("LS", "3.0");
Document doc = impl.createDocument("http://www.example.com", "fred", null);
LSOutput output = feature.createLSOutput();
output.setCharacterStream(
new FileWriter("/tmp/output.xml"));
LSSerializer serializer = feature.createLSSerializer();
serializer.write(
doc, output);
Unfortunately I still think that the XLST code is more compact. You might consider the DOM version if you want to be more obvious in your intent.

No comments:
Post a Comment