Hi, I am working with Xerces 2.1 and Xalan 1.4. I have written a function,findNodes(), for evaluating XPath expressions. It takes a ptr to a DOM_Node(the context node), the XPath exprssion in string format and a ptr to a vector of DOM_Nodes. Basically, i create a XercesDocumentBridge in the function, map the DOM_Node to a XalanNode using the bridge, and evaluate the XPath expression.
The problem that i am facing is that when I call the findNodes() function a couple of times, it works fine. But it fails the third time I call it. However, when I remove the 2nd call to findNodes(), the 3rd call strangely succeeds. Can someone give me pointers as to why this is happening ?? Am i going wrong somewhere in the function ? I have given the code in detail below.... THE CODE: **************************************************************************** ************* findNodes(DOM_Node* theContextNode, string paramXPathExpr,vector<DOM_Node> *paramVect) { DOM_Document* theOwnerDoc = new DOM_Document(); *theOwnerDoc = theContextNode->getOwnerDocument(); XercesDocumentBridge *theXDBridge = new XercesDocumentBridge(*theOwnerDoc,false,false); //map Xerces node of type DOM_Node to Xalan node XalanNode* xalContextNode = theXDBridge->mapNode(*theContextNode); //Evaluate the XPath Expr char *buff = new char[500]; memset(buff,0,500); paramXPathExpr.copy(buff, paramXPathExpr.length()); //theEvaluator is a member variable of the class of which findNodes() is a member //function NodeRefList nodeList = theEvaluator->selectNodeList(theDOMSupport, xalContextNode, XalanDOMString(buff).c_str(), theXDBridge->getDocumentElement()); //Insert the nodes from the NodeList into the vector for(int i = 0; i < nodeList.getLength(); i++) { //Map the node to DOM_Node DOM_Node theNode = theXDBridge->mapNode(nodeList.item(i)); paramVect->push_back(theNode); } delete xalContextNode; delete theXDBridge; delete theOwnerDoc; delete buff; } **************************************************************************** **************
<<attachment: winmail.dat>>