I'm guessing but I think the answer is the same as before - if you fail to set a system ID that is a full URI, results will be unpredictable.
In your examples, you start using your DOMSource and your StreamSource objects without having set their system IDs. I suggest creating the File objects separately so that you can use their .getAbsoluteFile().toURI() methods to obtain a proper URI that you can use as the system ID in your Source objects. Then set that ID in those objects either in the constructor or via a separate call to their .setSystemID() method. Let us know if it works. Ziv Ben-Eliahu wrote: > 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? >