I want to do a transform with a DOMSource input. If I do this from a file (i.e. StreamSource), it works fine, but changing only the argument to transform() to be a DOMSource, then the transformation fails with a HIERARCHY_REQUEST_ERR. I boiled down a test for this to its simplest form, containing 80 lines of code below. This code performs one of three transforms (differing in type of argument) by invoking with "-A", "-B", or "-C". It uses supplementary files test.xml and test.xsl following. Question 1: Why does transform() fail if I use a DOMSource argument??
I believe I am using Xalan 2.4.0 and Xerces 2.3.0. Question 2: How does one query Xalan/Xerces to find the version number? - - - - - - - - - - - - - - - - - - - - - - - - - - - - [File: TransformTest.java] package com.cleancode.xml; import java.io.File; import java.io.FileOutputStream; import javax.xml.transform.TransformerFactory; import javax.xml.transform.Transformer; import javax.xml.transform.stream.StreamSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.apache.xalan.serialize.Serializer; import org.apache.xalan.serialize.SerializerFactory; import org.apache.xalan.templates.OutputProperties; public class TransformTest { private static void echoXml(Node node, String what) throws Exception { System.out.println("Echoing "+what+":"); Serializer serializer = SerializerFactory.getSerializer (OutputProperties.getDefaultMethodProperties("xml")); serializer.setOutputStream(System.out); serializer.asDOMSerializer().serialize(node); System.out.println(""); System.out.println("Echo "+what+" complete."); } public static void main( String[] args ) throws Exception { String inName = "test.xml"; String outName = "test.out"; String xslName = "test.xsl"; boolean optA = (args.length > 0) && "-A".equals(args[0]); boolean optB = (args.length > 0) && "-B".equals(args[0]); boolean optC = (args.length > 0) && "-C".equals(args[0]); boolean ignoreWhitespace = false; boolean ignoreComments = false; boolean putCDATAIntoText = false; boolean createEntityRefs = false; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setIgnoringComments(ignoreComments); dbf.setIgnoringElementContentWhitespace(ignoreWhitespace); dbf.setCoalescing(putCDATAIntoText); dbf.setExpandEntityReferences(!createEntityRefs); DocumentBuilder db = dbf.newDocumentBuilder(); Element docRoot = db.parse(inName).getDocumentElement(); echoXml(docRoot, "Input"); File XslFile = new File(xslName); TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(new StreamSource(XslFile)); DOMResult dr = new DOMResult(); if (optA) { transformer.transform(new StreamSource(inName), dr); echoXml(dr.getNode(), "Output"); } else if (optB) { try { transformer.transform(new DOMSource(docRoot), dr); } catch (Exception e) { System.out.println("transform [DOMSource=>DOMResult] failed:" + e); } echoXml(dr.getNode(), "Output"); } else if (optC) { transformer.transform(new DOMSource(docRoot), new StreamResult(new FileOutputStream(outName))); System.out.println("output stored in " + outName); } else { System.out.println("usage: TransformTest [ -A|-B|-C ]"); } } } - - - - - - - - - - - - - - - - - - - - - - - - - - - - [File: test.xsl] <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:cc="stuff.com" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method="xml" indent="yes" omit-xml-declaration="no" /> <xsl:template match="/files"> <cc:myDoc> <xsl:for-each select="file"> <cc:indexItem> <file><xsl:value-of select="."/></file> </cc:indexItem> </xsl:for-each> </cc:myDoc> </xsl:template> </xsl:stylesheet> - - - - - - - - - - - - - - - - - - - - - - - - - - - - [File: test.xml] <?xml version="1.0" encoding="UTF-8"?> <files> <file>motivation.xml</file> <file>history.xml</file> </files> - - - - - - - - - - - - - - - - - - - - - - - - - - - -