Hello all,
I try to use the document() function to include XML instances from a
database. For passing character entities I need to use the startEntity()
and endEntity() calls on the LexicalHandler. In the URIResolver I create
a XMLReader and set this reader on the SAXSource, which I return to the
processor. Code goes like that:
public Source resolve(String href, String base)
throws TransformerException {
SAXSource source = null;
XMLReader sourcereader = null;
PublishLexicalHandler lh = new PublishLexicalHandler();
try {
sourcereader = XMLReaderFactory.createXMLReader();
sourcereader.setFeature(VALIDATION, true);
sourcereader.setProperty("http://xml.org/sax/properties/lexical-handler",
lh); // doesn't work for <xsl:for-each select="document(...)"/>
sourcereader.setErrorHandler(new PublishErrorHandler());
} catch (SAXNotRecognizedException nre) {
} catch (SAXNotSupportedException nse) {
} catch (SAXException e1) {
}
sourcereader.setEntityResolver(this);
source = new SAXSource(moduleResolver.resolveModule(new
CMSParameters(href)));
source.setXMLReader(sourcereader);
return source;
}
The problem is, that the LexicalHandler ("lh") receives no calls, when I
invoce the document() function in my XSLT templates. Curiously it works
with <xsl:include ...>. I don't know if this is a bug/missing feature
in Xalan or if I missunderstood something.
Please advice.
Christian Brandenstein
(Tested with xalan-2.5.2 and xalan-2.6.0)
--
christian brandenstein
willy-lessing-str. 18
96047 bamberg
phone: +49 (951) 2 08 59-83
fax: +49 (951) 2 08 59-77
email: mailto:chris@xxxxxxxxx
web: http://www.docufy.de
|