DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=25608>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=25608 DOMResult(Node) fails for Element when transform outputs more than one root node. Summary: DOMResult(Node) fails for Element when transform outputs more than one root node. Product: XalanJ2 Version: 2.5 Platform: All OS/Version: All Status: NEW Severity: Normal Priority: Other Component: org.apache.xml.utils AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] When using a DOMResult with an Element as the parameter a SAXException (Can't have more than one root on a DOM!) when the template evaluates to more than a single first level node. The following code/xml/xsl demonstrates the problem. ### test.java import java.io.*; import javax.xml.transform.*; import javax.xml.transform.stream.*; import javax.xml.transform.dom.*; import org.w3c.dom.*; import org.apache.xerces.dom.DocumentImpl; import org.apache.xml.serializer.*; public class test { static public void main(String[] args) { try { // Create xsl source StreamSource xslSource = new StreamSource(new File(args [0])); // Create xml source StreamSource xmlSource = new StreamSource(new File(args [1])); // Create transformer TransformerFactory tFactory = TransformerFactory.newInstance(); /// output the xslt Transformer transformer = tFactory.newTransformer (xslSource); // Create document // <ui><listbox><model/></listbox></ui> Document doc = new DocumentImpl(); Element ui = doc.createElement("ui"); Element listbox = doc.createElement("listbox"); Element model = doc.createElement("model"); doc.appendChild(ui); ui.appendChild(listbox); listbox.appendChild(model); DOMResult dr = new DOMResult(model); transformer.transform(xmlSource, dr); // Dump to System.out Transformer identity = tFactory.newTransformer(); identity.setOutputProperty("indent","yes"); identity.setOutputProperty("{http://xml.apache.org/xslt} indent-amount","4"); identity.transform(new DOMSource(doc), new StreamResult (System.out)); } catch ( Exception e ) { e.printStackTrace(); } } } ### xml.xml <?xml version="1.0" encoding="UTF-8"?> <addrList> <address> <name>One</name> <name>Two</name> <name>Three</name> <name>Four</name> </address> </addrList> ### xsl.xsl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="no"/> <xsl:template match="/"> <xsl:copy-of select="addrList/address/name"/> </xsl:template> </xsl:stylesheet>
