You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by Simon Del Fabbro <si...@cqrdata.com> on 2003/02/05 17:46:06 UTC
Re: Xalan Java2: XPath fragment with href in include element
Hi,
I have encountered a problem when trying to include a stylesheet which
has an XPath fragment in a URI.
I am working on a document management system and we have our own
namespace,
URL and URL handler. A stylesheet is wrapped up in some element as
follows
<some-tag>
<xsl:stylesheet>
...
</xsl:stylesheet>
</some-tag>
To import the stylesheet I would write:
<xsl:include href="cqr:////<some name to the content which contains the
XSL>#some-tag/* %5B
namespace-uri()='http://www.w3.org/1999/XSL/Transform' and
local-name()='stylesheet' %5D"/>
where %5B and %5D are [ and ] respectively.
This doesn't work. The templates defined in the imported template aren't
imported. Looking
at the Xalan code I noticed that the following method defined
org.apache.xalan.processor.StyleSheetHandler
sets the variable m_shouldProcess to false because my base identifier
has a # in it and therefore
the stylesheet doesn't get imported.
void pushBaseIndentifier(String baseID)
{
if (null != baseID)
{
int posOfHash = baseID.indexOf('#');
if (posOfHash > -1)
{
m_fragmentIDString = baseID.substring(posOfHash + 1);
m_shouldProcess = false;
}
else {
m_shouldProcess = true;
}
}
else
m_shouldProcess = true;
m_baseIdentifiers.push(baseID);
}
So here's my question: what is this method doing? i.e. what sort of base
identifiers is this check
looking for?
Also, pushBaseIndentifier is misspelt.
Additional points to consider:
URL handler with XPath works OK. Grabs the right blob of XML elements
i.e. a stream containing an XML document which is
a stylesheet.
Here's weird one. The included stylesheet contained a template which the
importing stylesheet called. This template wasn't
obviously being called (trace writes verified this), but no error was
raised. That is, no-template-with-name-was-found type
error was raised. Removing this include statement or placing it at the
end of the stylesheet and it complained that it couldn't
find the template.
S.