Hi, I am trying to get the selectListNodes method to work. Having a tough time returning a set of nodes (converting from xalanNode to DOM nodes). Here is the code. Can someone please point me to some resources or solution? Always get a crash in vector destructor
bool XMLReader::selectNodes(const TCHAR* xpathExpr, std::vector<DOM_Node>& nodes) { // Set up a XercesParserLiaison and use it to wrap the DOM_Document // in a XalanDocument. XercesDOMSupport theDOMSupport; XercesParserLiaison theParserLiaison(theDOMSupport); theParserLiaison.setDoNamespaces(m_parser->getDoNamespaces()); XalanDocument* theDoc = theParserLiaison.createDocument(getDocument()); assert(theDoc); XPathEvaluator theEvaluator; // OK, let's find the context node... NodeRefList const theContextNodes = theEvaluator.selectNodeList( theDOMSupport,theDoc, XalanDOMString(xpathExpr).c_str(), theDoc->getDocumentElement()); nodes.clear(); int numNodes = theContextNodes.getLength(); if(numNodes) { nodes.reserve(numNodes); const XercesDocumentBridge* bridge= theParserLiaison.mapDocument(theDoc); if(bridge) { for(int i=0;i<numNodes;++i) { DOM_Node aNode = bridge->mapNode(theContextNodes.item(i)); nodes.push_back(aNode); } return true; } } return false; } //usage void TestXmlReader() { CimfXMLReader reader; reader.parseDoc("c:/temp/wpp/wpp3.xml",true,true,true); bool retVal; std::vector<DOM_Node> nodes; if(reader.selectNodes("//x:Model",nodes)) { std::vector<DOM_Node>::iterator it = nodes.begin(); for(;it != nodes.end();++it) { tstring str = reader.getAttValue("Type", (*it)); AfxMessageBox( str.c_str()); *it = 0; } } nodes.clear(); } ===== __________________________________________________ Do You Yahoo!? Yahoo! Sports - live college hoops coverage http://sports.yahoo.com/