Mike,
Thanks for the quick response. What you are saying makes sense, but I was
hoping to use a dynamically generated stylesheet as an easy way to inject
some lookup info into the result. If Xalan was just using the system id as
a unique identifier then I would be okay. But instead if I change the code
to the following:
Source xsl = new StreamSource(new FileInputStream("media.xsl"));
xsl.setSystemId("MyXSL");
Transformer transformer = tFactory.newTransformer(xsl);
I get :
file:///C:/.../MyXSL; Line #34; Column #78; Can not load requested doc:
C:\...\MyXSL (The system cannot find the file specified)
which leads me to believe that Xalan is actually using the system id as a
URI to load a resource. It seems kind of broken to require that any
stylesheet that references itself be reloadable and that it actually would
reload it and reparse it.
I even thought, well, a StreamSource is not re-usable, so what if I use a
DOMSource. Same story, Xalan tries to reload the original stylesheet using
the system id. This is really bumming me out :)
Mike Brown-3 wrote:
>
> dnfoote wrote:
>> I have done some testing with a style sheet that uses the document
>> function
>> with an empty string as its only argument. The document('') call errors
>> out
>> complaining 'SystemId Unknown' if I invoke newTransformer as follows:
>>
>> Transformer transformer = tFactory.newTransformer(new StreamSource(new
>> FileInputStream("media.xsl")));
>>
>> instead of:
>>
>> Transformer transformer = tFactory.newTransformer(new
>> StreamSource("media.xsl"));
>
> Because when you constructed the StreamSource from a FileInputStream, you
> didn't set the StreamSource's system ID, which is a URI to use as the
> document's ID and against which your processor's URIResolver will resolve
> relative references like the '' (empty string) in that document() call.
>
> See the StreamSource API docs and set the system ID to a full URI like
> "file:///C:/path/to/media.xsl".
>
>> Is it true that Xalan cannot reference the stylesheet document tree
>> unless
>> it got the document from a URI in the first place?
>
> No, it's not true.
>
> However, every document has a URI / system ID, regardless of how the
> document
> was obtained, transmitted, or referred to in APIs. Maybe it represents
> where
> you got the doc from, maybe not. If you didn't set one, then one was
> assigned
> to it -- probably not very intelligently. If you did set one, but it
> wasn't a
> full URI, then the results are unpredictable and implementation-dependent
> and
> sometimes wrong, as you've observed with your test stylesheet.
>
>> Has anyone else seen this behavior? Is it correct?
>
> First time I've seen it.
>
> Even though you weren't really setting the base URI / system ID correctly,
> your stylesheet shouldn't have failed. I'd consider it a bug in Xalan,
> but
> others may disagree.
>
--
View this message in context:
http://www.nabble.com/document%28%27%27%29-tf2884411.html#a8060924
Sent from the Xalan - J - Users mailing list archive at Nabble.com.