transform() fails for DOMSource but succeeds for StreamSource 2006-12-27 - By Ziv Ben-Eliahu
Hi There. I have a similar problem - fails for DOMSource but succeeds for StreamSource - but failure is not an error, it is a different output.
I have the following XML: <apple xmlns="http://purl.oclc.org/NET/JSX/0.3/Apple"> <shop type="happy-days"> <owner name="Jhon" type="big"/> </shop> <order name="GooGoo" type="org.goo" /> </apple>
I have two parsers - an identity-transformer and a xsl-transformer : Transformer tfCopy = javax.xml.transform.TransformerFactory .newInstance().newTransformer(); Transformer tf = javax.xml.transform.TransformerFactory .newInstance()newTransformer( new StreamSource(new File("Apple.xsl")));
I have three source type - by stream, builder-parsed, builder-created: Document parsedDoc = builder.parse(new File("apple.xml")); DOMSource parsedSource = new DOMSource(parsedDoc); StreamSource streamSource = new StreamSource(new File("apple.xml")); DOMSource builtSource = new DOMSource(build()); // build() is a manual build of the parsed document
When I use the identity-transformer the results are the same: tfCopy.transform(streamSource, new StreamResult(new File("d:/streamed.xml"))); tfCopy.transform(builtSource, new StreamResult(new File("d:/built.xml"))); tfCopy.transform(parsedSource, new StreamResult(new File("d:/parsed.xml")));
When I use the XSL-based-transformer, results are completely different. tf.transform(builtSource, new StreamResult(new File("d:/built.html"))); tf.transform(parsedSource, new StreamResult(new File("d:/parsed.html"))); tf.transform(streamSource, new StreamResult(new File("d:/streamed.html")));
I won't include them since they are long, but to sum up: The stream-source gave the expected results. The parsed-dom-source (from the same file as the stream-source) gave bad results - its like the Document was not recognized. The manually-built-dom-source gave the expected results.
Question: how come identity-transformer worked fine with the parsed DOM and a xsl-transformer did not?
My current solution is: Use the identity-transformer to copy from the parsed-dom to a result-dom. Then take the node from the result-dom. The XSL-transformer works fine with that node.
Thank you for your help, Ziv.
SORENS,MICHAEL (HP-Boise,ex1) wrote: > 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?
|
|