The Apache XML Project's Xerces-J includes the org.apache.xml.serialize package for writing DOM Document objects onto output streams. Although this class is bundled with Xerces, it works with any DOM2 implementation. It does not depend on the details of the Xerces implementation classes, only on the standard DOM interfaces. The basic technique for serializing documents with org.apache.xml.serialize is as follows :
For example, the following code could replace the JAXP ID transform from several examples in the last few chapters: try { OutputFormat format = new OutputFormat(document); XMLSerializer output = new XMLSerializer(System.out, format); output.serialize(document); } catch (IOException e) { System.err.println(e); } XMLSerializer has a number of advantages over JAXP, including maintaining the document type declaration. Furthermore, it's much more configurable. XMLSerializer has several constructors. Which to choose depends on whether you want to write to an OutputStream or a Writer , and whether or not you want to provide an OutputFormat when you create the serializer: public XMLSerializer () public XMLSerializer (OutputFormat format ) public XMLSerializer (Writer out, OutputFormat format ) public XMLSerializer (OutputStream out, OutputFormat format ) Generally I recommend that you specify both the format and the stream or writer when you construct the XMLSerializer . That said, you can set them or change them later with these methods : public void setOutputFormat (OutputFormat format ) public void setOutputByteStream (OutputStream out ) public void setOutputCharStream (Writer out ) You must specify either the byte stream or the char stream before you can serialize. If you don't want to serialize the entire document, then you can pass just an Element or a DocumentFragment to the serialize() method: public void serialize (DocumentFragment fragment ) throws IOException public void serialize (Document doc ) throws IOException public void serialize (Element element ) throws IOException There are many other methods in the XMLSerializer class that, for the most part, you should ignore, unless you're subclassing it. |