I do my best thinking while driving home. Last night I thought that a possible solution that I could try is exactly what you suggest below. So, I had another look at the code today and tried the following code changes to TXFMXPath::evaluateExpr(...) which seems to work (on the limited test data that I am using).
The following code fragments come from TXFMXPath::evaluateExpr(...). My changes are commented with my initials JDM. I have left in just enough context for you to see where in TXFMXPath::evaluateExpr(...) I have added the code. If you would care to look it over, I would appreciate. As to your other comment "why dont I used a more complex XPath expression" - I probably will, but I am an "old" programer who tries to modularise things into small, easy-to-understand bits. I find long XPath expressions too taxing on the brain. ta John switch (inputType) { case DOM_NODE_DOCUMENT : case DOM_NODE_XPATH_NODESET : // Added by JDM. // do XPath over the whole document and, if the input was an XPath Nodeset, then // later intersect the result with the input nodelist cd = XalanDOMString("/"); // Root node cexpr = cd.c_str(); ..... ..... .... .... ... ... .. . for (int i = 0; i < size; ++ i) { if (lst.item(i) == xd) m_XPathMap.addNode(document); else { item = xwn.mapNode(lst.item(i)); m_XPathMap.addNode(item); } } // Start Insert by JDM if (inputType == DOM_NODE_XPATH_NODESET) { //the input list was a XPATH nodeset, so we must intersect the results of the XPath //processing done above with the input nodeset m_XPathMap.intersect(input->getXPathNodeList()); } // End Insert by JDM xpesd.uninstallExternalFunctionGlobal(XalanDOMString(URI_ID_DSIG), XalanDOMString("here"));