Greetings to all -
I'm having a problem processing xml with relative dtd URI specified
using XSLT:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mydoc SYSTEM "my.dtd">
<mydoc>
....
</mydoc>
I do not have a control over the original xml but I have my.dtd in the
app classpath. I'm getting the TransformerExce ption: Relative URI
"my.dtd" can not be resolved without a base URI.
How do I tell to javax.xml.trans form.Transforme r where to find the dtd
file w/out specifying the base URI (or any other modifications of the
original xml)?
Here is how I call the xsl transformer:
// 1. Instantiate a TransformerFact ory.
javax.xml.trans form.Transforme rFactory tFactory =
javax.xml.trans form.Transforme rFactory.newIns tance();
// 2. Use the TransformerFact ory to process the stylesheet Source and
// generate a Transformer.
javax.xml.trans form.Transforme r transformer =
tFactory.newTra nsformer(new
javax.xml.trans form.stream.Str eamSource(xsl)) ;
//transformer.set URIResolver(new RelativeURIReso lver());
// 3. Use the Transformer to transform an XML Source and send the
// output to a Result object.
transformer.tra nsform(
new javax.xml.trans form.stream.Str eamSource(xml),
new javax.xml.trans form.stream.Str eamResult(out)) ;
As you can see above, I've tried to use URIResolver() but it does not
appear to be used by the transformer to resolve the DTD.
I'm using Java(TM) 2 Runtime Environment, Standard Edition (build
1.4.2_03-b02) and default xslt processor and xml parser from there
("org.apache.xa lan.processor.T ransformerFacto ryImpl" and
"org.apache.cri mson.jaxp.Docum entBuilderFacto ryImpl" I assume).
Of course, I could use java.util.regex to either remove
<!DOCTYPE[a-zA-Z0-9\". ]*> completely or to add the base url there.
But I wonder if there is more elegant solution to this.
Any suggestions are very appreciated.
Thanks
Pavel