Simon McClenahan wrote: > > I want to bundle a JAXP compliant XML parser with my application, with > the requirement that the jar file is as small as possible. From what I > can tell, between Crimson, Xerces1 and Xerces2, I am using Crimson > because of its smaller jar size. However, if there is a way to > distribute Xerces2 without all the classes that I don't use so that it > reduces the size of the jar, that would be preferable. > > Now that I'm using Crimson, I have a technical question about > serialization, and apparently this list is the only forum for Crimson > discussion.
The serialization interface you are using will tie your app to Crimson. Another way is to use javax.xml.transform, but that would conflict w/ keeping your app small. Another option is to require running on JDK 1.4 which includes JAXP within it so you would not need to bundle anything w/ your app. Also see the JAXP FAQ at http://xml.apache.org/~edwingo/jaxp-faq.html#output for more info. That page also has pointers to other non-Apache parsers. > > I can serialize a Document fine, but I haven't figured out how to > serialize any other type of DOM Node. My code is: > > ---------------------------------------------------------------------- > public static String serializeToString(Node aNode) { > String myResult = null; > // Crimson implementation > StringWriter myStringWriter = new StringWriter(); > short myNodeType = aNode.getNodeType(); > try { > switch (myNodeType) { > case Node.DOCUMENT_NODE : > ((XmlDocument) > aNode).write(myStringWriter, XMLUtils.ENCODING_UTF_8); > break; > default : > XmlDocument myXmlDocument = > (XmlDocument) aNode.getOwnerDocument(); > myXmlDocument.writeChildrenXml( > > myXmlDocument.createWriteContext(myStringWriter, 0)); > break; > } > } catch (IOException e) { > String myMsg = "Unable to serialize DOM Node: " > + e.getMessage(); > throw new RuntimeException(myMsg); > } > myResult = myStringWriter.toString(); > return myResult; > } > ---------------------------------------------------------------------- > > However, the default non-Document case returns an empty String. From > what I can tell this is because Crimson does not see any children of the > given DOM Node and exits early without serializing anything. > > Specifically, I would like to serialize an Element. Do I have to write a > hack that creates a new XmlDocument, import the Element, then serialize > the XmlDocument without the XML header information currently hard coded > in XmlDocument.write() ? If you or anyone else wants to figure it out, I'd start looking at the code in org/apache/crimson/tree/ElementNode and ElementNode2.java. -Edwin --------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]