<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12">
<TITLE>Transformation differences when using a JDOMResult vs. a DOMResult</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Hi, </FONT>
</P>

<P><FONT SIZE=2>I have a need to transform an XML document into an XSL document, in preparation for a final transformation on an XML document.</FONT></P>

<P><FONT SIZE=2>I have written a test class that transforms a file (empty.xml) using another file (test.xsl).&nbsp; The Document returned is different, and incorrect, if I use a JDOMResult instead of a DOMResult.</FONT></P>

<P><FONT SIZE=2>Using DOMResult returns: </FONT>
<BR><FONT SIZE=2>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt; </FONT>
<BR><FONT SIZE=2>&lt;foo:myelement xmlns:foo=&quot;<A HREF="http://www.mywebsite.org" TARGET="_blank">http://www.mywebsite.org</A>&quot;&gt;content blah blah&lt;/foo:myelement&gt; </FONT>
</P>

<P><FONT SIZE=2>Using JDOMResult returns: </FONT>
<BR><FONT SIZE=2>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; </FONT>
<BR><FONT SIZE=2>&lt;foo:myelement xmlns:foo=&quot;<A HREF="http://www.mywebsite.org" TARGET="_blank">http://www.mywebsite.org</A>&quot; foo=&quot;<A HREF="http://www.mywebsite.org" TARGET="_blank">http://www.mywebsite.org</A>&quot;&gt;content blah blah&lt;/foo:myelement&gt; </FONT>
</P>

<P><FONT SIZE=2>Notice the extra attribute returned using the JDOMResult (foo=&quot;<A HREF="http://www.mywebsite.org" TARGET="_blank">http://www.mywebsite.org</A>&quot;). </FONT>
</P>

<P><FONT SIZE=2>Is there a way to make the JDOMResult not have the extra attribute? </FONT>
</P>

<P><FONT SIZE=2>Thanks in advance,</FONT>
</P>

<P><FONT SIZE=2>Michael</FONT>
</P>

<P><FONT SIZE=2>Example info below</FONT>
</P>

<P><FONT SIZE=2>I am using jdk 1.3.1, xerces 1.3, xalan 2.1.0, and I have downloaded the latest code from cvs.jdom.org this morning. </FONT>
</P>

<P><FONT SIZE=2>Here is my empty.xml file: </FONT>
<BR><FONT SIZE=2>======================================================================== </FONT>
<BR><FONT SIZE=2>&lt;!-- edited with XML Spy v3.5 NT (<A HREF="http://www.xmlspy.com" TARGET="_blank">http://www.xmlspy.com</A>) by Maggie (OGI) --&gt; </FONT>
<BR><FONT SIZE=2>&lt;root&gt;empty&lt;/root&gt; </FONT>
<BR><FONT SIZE=2>======================================================================== </FONT>
</P>

<P><FONT SIZE=2>Here is my test.xsl file: </FONT>
<BR><FONT SIZE=2>======================================================================== </FONT>
<BR><FONT SIZE=2>&lt;?xml version=&quot;1.0&quot;?&gt; </FONT>
<BR><FONT SIZE=2>&lt;xsl:stylesheet version=&quot;1.0&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsl=&quot;<A HREF="http://www.w3.org/1999/XSL/Transform" TARGET="_blank">http://www.w3.org/1999/XSL/Transform</A>&quot;</FONT></P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:foo=&quot;<A HREF="http://www.mywebsite.org" TARGET="_blank">http://www.mywebsite.org</A>&quot;&gt; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsl:template match=&quot;/&quot;&gt; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;foo:myelement&gt;content blah blah&lt;/foo:myelement&gt; </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsl:template&gt; </FONT>
<BR><FONT SIZE=2>&lt;/xsl:stylesheet&gt; </FONT>
<BR><FONT SIZE=2>======================================================================== </FONT>
</P>

<P><FONT SIZE=2>Here is my test program: </FONT>
<BR><FONT SIZE=2>======================================================================== </FONT>
<BR><FONT SIZE=2>// Imported TraX classes </FONT>
<BR><FONT SIZE=2>import javax.xml.transform.TransformerFactory; </FONT>
<BR><FONT SIZE=2>import javax.xml.transform.Transformer; </FONT>
<BR><FONT SIZE=2>import javax.xml.transform.stream.StreamSource; </FONT>
<BR><FONT SIZE=2>import javax.xml.transform.TransformerException; </FONT>
<BR><FONT SIZE=2>import javax.xml.transform.TransformerConfigurationException; </FONT>
<BR><FONT SIZE=2>import javax.xml.transform.dom.DOMResult; </FONT>
</P>

<P><FONT SIZE=2>// Imported java.io classes </FONT>
<BR><FONT SIZE=2>import java.io.IOException; </FONT>
</P>

<P><FONT SIZE=2>// Imported java.net classes </FONT>
<BR><FONT SIZE=2>import java.net.URL; </FONT>
</P>

<P><FONT SIZE=2>// Imported JDOM classes </FONT>
<BR><FONT SIZE=2>import org.jdom.Document; </FONT>
<BR><FONT SIZE=2>import org.jdom.transform.JDOMResult; </FONT>
<BR><FONT SIZE=2>import org.jdom.output.XMLOutputter; </FONT>
</P>

<P><FONT SIZE=2>// Imported Serializer classes </FONT>
<BR><FONT SIZE=2>import org.apache.xalan.serialize.Serializer; </FONT>
<BR><FONT SIZE=2>import org.apache.xalan.serialize.SerializerFactory; </FONT>
</P>

<P><FONT SIZE=2>import org.apache.xalan.templates.OutputProperties; </FONT>
</P>

<P><FONT SIZE=2>/** </FONT>
<BR><FONT SIZE=2>&nbsp;* This class tests the transformation of an XSL file into another XSL file. </FONT>
<BR><FONT SIZE=2>&nbsp;* </FONT>
<BR><FONT SIZE=2>&nbsp;* It compares the differences between using a JDOMResult vs. a DOMResult. </FONT>
<BR><FONT SIZE=2>&nbsp;* </FONT>
<BR><FONT SIZE=2>&nbsp;* To use a DOMResult:&nbsp; java DOM2DOMTest </FONT>
<BR><FONT SIZE=2>&nbsp;* To use a JDOMResult: java DOM2DOMTest JDOM </FONT>
<BR><FONT SIZE=2>&nbsp;*/ </FONT>
<BR><FONT SIZE=2>public class DOM2DOMTest </FONT>
<BR><FONT SIZE=2>{ </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args) </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws&nbsp; TransformerException, </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TransformerConfigurationException, </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IOException </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL xslUrl = new URL(&quot;<A HREF="file:test.xsl" TARGET="_blank">file:test.xsl</A>&quot;); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StreamSource xslDomSource = new StreamSource(xslUrl.openStream()); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xslDomSource.setSystemId(xslUrl.getPath()); </FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL xmlUrl = new URL(&quot;<A HREF="file:empty.xml" TARGET="_blank">file:empty.xml</A>&quot;); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StreamSource xmlDomSource = new StreamSource(xmlUrl.openStream()); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlDomSource.setSystemId(xmlUrl.getPath()); </FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TransformerFactory tFactory = TransformerFactory.newInstance(); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transformer transformer = tFactory.newTransformer(xslDomSource); </FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (args.length == 1 &amp;&amp; args[0].equalsIgnoreCase(&quot;JDOM&quot;)) </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outputUsingJDOM(transformer, xmlDomSource); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; useStandardOutput(transformer, xmlDomSource); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static void useStandardOutput(Transformer transformer, StreamSource xmlDomSource) </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws TransformerException, IOException </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOMResult domResult = new DOMResult(); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transformer.transform(xmlDomSource, domResult); </FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serializer serializer = SerializerFactory.getSerializer </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (OutputProperties.getDefaultMethodProperties(&quot;xml&quot;));</FONT></P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serializer.setOutputStream(System.out); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serializer.asDOMSerializer().serialize(domResult.getNode()); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static void outputUsingJDOM(Transformer transformer, StreamSource xmlDomSource) </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws TransformerException, IOException </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JDOMResult domResult = new JDOMResult(); </FONT>
</P>

<P><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transformer.transform(xmlDomSource, domResult); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XMLOutputter outputter = new XMLOutputter(); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; outputter.output(domResult.getDocument(), System.out); </FONT>
<BR><FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </FONT>
<BR><FONT SIZE=2>} </FONT>
<BR><FONT SIZE=2>======================================================================== </FONT>
</P>

</BODY>
</HTML>