This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Errors when trying to use Xalan instead of Saxon
- From: "Andrew Welch" <awelch at piper-group dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Wed, 24 Jul 2002 15:17:55 +0100
- Subject: RE: [xsl] Errors when trying to use Xalan instead of Saxon
- Reply-to: xsl-list at lists dot mulberrytech dot com
It may be way off the mark but Ive read (and used myself) that when
dealing with in memory representations of data you might find
StringReader useful:
So for your case
Reader reader = new StringReader(n);
InputSource in = new InputSource(reader);
TransformerFactory.newInstance().newTransformer(new SAXSource(n));
(untested)
cheers
andrew
-----Original Message-----
From: Jason Silva [mailto:jason.silva@redknee.com]
Sent: 24 July 2002 14:56
To: xsl-list@lists.mulberrytech.com
Subject: RE: [xsl] Errors when trying to use Xalan instead of Saxon
Thanks for the info Kumar,
I tried a bunch of different variations but the problem lies in the
conformity between Xerces and Crimson. You see, I am trying to have
multiple stylesheets nested within one XSL file. I am using DOM, in
particular the Node class to break up the file into chunks and then run
the transformations in a loop. This worked fine with Crimson and Saxon
but gives me an error with Xerces and Xalan. The problem lies when
attempting to get a ByteStream from the myNode.toString() and then
constructing a transform with this Stream. With Crimson the
myNode.toString gives me a nice String containing the nested template.
However with Xerces I get the root name and null. I have also tried
instantiating the transformer with the Node itself but this doesn't work
either.
Below is what I have ... I think we run into diffuculty trying to have
multiple stylesheets in one xsl file, but this should be do-able.
Element root = transform.getDocumentElement();
if ( root.getTagName().equals("xsl:stylesheet") )
{
Transformer transformer =
TransformerFactory.newInstance().newTransformer(new
DOMSource(root/*transform*/));
transformer.transform(new DOMSource(model), result);
}
else if ( root.getTagName().equals("pipeline") )
{
NodeList l = root.getChildNodes();
for ( int i = 0, j = 1 ; i < l.getLength() ; i++ )
{
Node n = l.item(i);
if ( ! ( n instanceof Element ) ) continue;
System.out.println("String: " + n.toString());
//Tried initializing with DOMSource(n) but that does not work either
Transformer transformer =
TransformerFactory.newInstance().newTransformer(
new SAXSource(new InputSource (new
ByteArrayInputStream(n.toString().getBytes()))));
DOMResult domResult = new DOMResult();
transformer.transform(new DOMSource(model), domResult);
model = (Document) domResult.getNode();
}
// create an identity transform just to copy to the final result
Transformer transformer =
TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(model), result);
}
Sorry about the formatting.
Any Suggestions would be much appreciated
Thanks a bunch
Jason Silva
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
---
Incoming mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.373 / Virus Database: 208 - Release Date: 01/07/2002
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.373 / Virus Database: 208 - Release Date: 01/07/2002
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list