Kevin Cormier wrote: > The getDefaultMethodProperties(String method) method of the > org.apache.xml.serializer.OutputPropertiesFactory class is static, so you > can't call it on the instance that you've created. You can call it like > this: > > <xsl:variable name="formatprops" > select="java:org.apache.xml.serializer.OutputPropertiesFactory.getDefaultMethodProperties('xml')"/> > > As for the SerializerFactory, its constructor is private, so it can't be > instantiated directly. You have to use the static getSerializer(Properties > format) method to obtain an instance.
Ah! Thank you! That was exactly what I needed. I knew I must've overlooked something. Here's XSLT demonstrating both the pure-JAXP and DOMSerializer methods. I couldn't find a SAXSerializer in the Xalan 2.7.1 distribution. <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java"> <xsl:output method="text"/> <xsl:template match="/"> <xsl:text>JAXP: ===== </xsl:text> <xsl:call-template name="serialize-xml-via-JAXP"/> <xsl:text> org.apache.xml.serializer.DOMSerializer: ======================================== </xsl:text> <xsl:call-template name="serialize-xml-via-DOMSerializer"/> </xsl:template> <xsl:template name="serialize-xml-via-JAXP"> <!--TransformerFactory tfactory = new TransformerFactory.newInstance();--> <xsl:variable name="tfactory" select="java:javax.xml.transform.TransformerFactory.newInstance()"/> <!--Transformer t = tfactory.newTransformer();--> <xsl:variable name="t" select="java:newTransformer($tfactory)"/> <!--DOMSource isrc = new DOMSource(nodeset);--> <xsl:variable name="isrc" select="java:javax.xml.transform.dom.DOMSource.new(.)"/> <!--StringWriter buffer = new StringWriter();--> <xsl:variable name="buffer" select="java:java.io.StringWriter.new()"/> <!--StreamResult result = new StreamResult(buffer);--> <xsl:variable name="result" select="java:javax.xml.transform.stream.StreamResult.new($buffer)"/> <!--t.transform(isrc, result)--> <xsl:variable name="void0" select="java:transform($t, $isrc, $result)"/> <!--System.out.write(buffer.toString());--> <!--Also clean up newlines--> <xsl:value-of select="translate(java:toString($buffer), ' ', '')"/> </xsl:template> <xsl:template name="serialize-xml-via-DOMSerializer"> <!--String method = org.apache.xml.serializer.Method.XML; Properties formatprops = OutputPropertiesFactory.getDefaultMethodProperties(method);--> <xsl:variable name="formatprops" select="java:org.apache.xml.serializer.OutputPropertiesFactory.getDefaultMethodProperties('xml')"/> <!--Serializer serializer = SerializerFactory.getSerializer(formatprops);--> <xsl:variable name="serializer" select="java:org.apache.xml.serializer.SerializerFactory.getSerializer($formatprops)"/> <!--StringWriter buffer = new StringWriter();--> <xsl:variable name="buffer" select="java:java.io.StringWriter.new()"/> <!--serializer.setWriter(buffer);--> <xsl:variable name="void1" select="java:setWriter($serializer, $buffer)"/> <!--DOMSerializer domserializer = serializer.asDOMSerializer();--> <xsl:variable name="domserializer" select="java:asDOMSerializer($serializer)"/> <!--domserializer.serialize(node);--> <xsl:variable name="void2" select="java:serialize($domserializer, .)"/> <!--System.out.write(buffer.toString());--> <xsl:value-of select="java:toString($buffer)"/> </xsl:template> </xsl:stylesheet>