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/

Reply via email to