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>

Reply via email to