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"));




Reply via email to