This isn't actually an XSLT problem, it's a JAXP/SAX problem...
Specify a base URI for the source document by calling setSystemId() on
the SAXSource object, and perhaps on the InputSource object as well.
Note that a SAX parser must convert a relative URI to an absolute URI
before it calls your EntityResolver.
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
David Byrden
Sent: 30 August 2002 13:26
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Xalan complains about relative DTD URL in
transformed document
I'm using JDK14 to transform some XML
documents that reference a DTD with a relative URL.
I'm getting this exception:
org.xml.sax.SAXParseException: Relative URI "../../text
bodies.dtd"; can
not be resolved without a base URI.
Believe me I've spent time on this, and the
code I'm using now is from a solution posted to this
list by J.Pietschmann:
Transformer tr =
TransformerFactory.newInstance().newTransformer( transform )
; SAXParserFactory saxParserFactory =
SAXParserFactory.newInstance() ;
saxParserFactory.setValidating( false ) ; XMLReader xmlReader
= saxParserFactory.newSAXParser().getXMLReader() ;
xmlReader.setEntityResolver( new MyResolver() ) ;
tr.transform( new SAXSource( xmlReader, src ), res ) ;
Unfortunately it does not work, in that the MyResolver
is not even called on to resolve anything before
the exception occurs.
Any ideas? I do want to use a relative URL for the DTD.
David
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list