passing xml nodes/documents/fragments as parameters to xslt
(Posting a new answer, as the previous one did not solve the issue and this new one is radically different from the previous)
Seems to be a known issue with XALAN compiling processor ( XALANJ-2057, How can I pass a node as parameter to translets for XSLTC Processor).
So, what are the alternatives?
- mess around with URIs as outlined in a response to How can I pass a node as parameter to translets for XSLTC Processor post
- Instead of XALAN compiling processor (XSLTC), use XALAN interpretive processor. Or any other XSLT processor that supports such behavior.
- Use DTMAxisIterator instead, also outlined in a response to How can I pass a node as parameter to translets for XSLTC Processor post - not sure if it will work, though.
- Create a new DOM tree, combining your "parameter" DOM and the original XSLT input document
I found a solution (here: XSLT Processing with Java : passing xml content in parameter) which may work for your case as well:
String urls = "<urls><url id='google'>https://www.google.com</url>...";
trans.setParameter("lookupdoc", new StreamSource(new StringReader(urls)));
instead of creating a uriresolver from a string, just create a stream source from a string reader and pass it to the stylesheet.
After that, I was able to access the doc normally as XML:
<xsl:param name="lookupdoc"><urls/></xsl:param>
...
<xsl:variable name="googleurl" select="$lookupdoc/@id='google"/>
Did not test with xalan, but maybe the answer will help others who stumble onto this question :)