Hi,
    Can anybody suggest me the place where i get some sample code .
I am a newbie and want to learn Xerces domparser.

Pls suggest on this

--MS


On Thu, 01 Jun 2006 Mannion,Enda wrote :
>Hi,
>
>Thanks for getting back to me, I have implemented the changes you
>suggested and I still get a leak of 24K each time the function is
>called.
>
>Anything else I can do to free up memory in this function.
>
>
>\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
>\\
>{
>      xercesc::XercesDOMParser* parser = new
>xercesc::XercesDOMParser();
>      if(parser == NULL)
>      {
>           return "";
>      }
>
>
>parser->setValidationScheme(xercesc::XercesDOMParser::Val_Never);    //
>optional.
>      parser->setDoNamespaces(false);    // optional
>
>      xercesc::ErrorHandler* errHandler = (xercesc::ErrorHandler*) new
>xercesc::HandlerBase();
>      parser->setErrorHandler(errHandler);
>
>      string metaDataFile = GetMetadataFileName(submissionID);
>
>      try
>      {
>           // path to metadata file
>           parser->parse(metaDataFile.c_str());
>      }
>
>      catch (const xercesc::XMLException& toCatch)
>      {
>           char* message =
>xercesc::XMLString::transcode(toCatch.getMessage());
>           std::cout << "Exception message is: \n" << message <<
>"\n";
>           LOGERROR("Exception message is: " << message);
>           xercesc::XMLString::release(&message);
>
>           delete parser;
>           delete errHandler;
>           return "";
>      }
>
>      catch (const xercesc::DOMException& toCatch)
>      {
>           char* message =
>xercesc::XMLString::transcode(toCatch.msg);
>           std::cout << "Exception message is: \n" << message <<
>"\n";
>           LOGERROR("Exception message is: " << message);
>           xercesc::XMLString::release(&message);
>
>           delete parser;
>           delete errHandler;
>           return "";
>      }
>
>      catch (...)
>      {
>           std::cout << "Unexpected Exception \n";
>
>           LOGERROR("Metadata::ReadMetaDataState xercesc (...)
>Exception");
>           delete parser;
>           delete errHandler;
>           return "";
>      }
>
>      xercesc::DOMDocument* xmlDoc = parser->getDocument();
>
>      if( NULL == xmlDoc )
>      {
>           std::cout<<"xml doc is null, quit\n";
>           delete parser;
>           delete errHandler;
>           return "";
>      }
>
>      xercesc::DOMNode* docNode = xmlDoc->getDocumentElement();
>
>      if( NULL == docNode )
>      {
>           std::cout<<"doc is null, quit\n";
>           delete parser;
>           delete errHandler;
>           return "";
>      }
>
>      xercesc::DOMNodeList* list;
>      xercesc::DOMNode* node;
>      const XMLCh* n;
>      char* xmlval = "";
>      string szXmlVal = "";
>
>
>      // <em> ToDo check if it reads the ints
>      //list = xmlDoc->getElementsByTagName(
>XMLString::transcode(szTag.c_str()) );
>
>      XMLCh* tag=XMLString::transcode(szTag.c_str());
>      list = xmlDoc->getElementsByTagName( tag );
>      XMLString::release(&tag);
>
>      node = list->item(0);
>      if( xercesc::DOMNode::ELEMENT_NODE == node->getNodeType() )
>      {
>           n = node->getFirstChild()->getNodeValue();
>           xmlval = xercesc::XMLString::transcode(n);
>           szXmlVal = xmlval;
>      }
>
>      xercesc::XMLString::release(&xmlval);
>
>      delete parser;
>      delete errHandler;
>      return szXmlVal;
>
>}
>\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
>\\
>
>
>-----Original Message-----
> From: Alberto Massari [mailto:[EMAIL PROTECTED]
>Sent: 01 June 2006 12:15
>To: [email protected]
>Subject: Re: Memory leak in DOM Parser
>
>Hi Enda,
>
>At 12:07 PM 6/1/2006 +0100, Mannion, Enda wrote:
> >Hi I have a memory leak in this function, can anyone see where? Do I
> >need to release const XMLCh* n; at the bottom, how do I do this.
> >[...]
> >        xercesc::DOMNodeList* list;
> >        xercesc::DOMNode* node;
> >        const XMLCh* n;
> >        char* xmlval = "";
> >        string szXmlVal = "";
> >
> >
> >list = xmlDoc->getElementsByTagName(
>XMLString::transcode(szTag.c_str())
> >);
> >        node = list->item(0);
> >        if( xercesc::DOMNode::ELEMENT_NODE == node->getNodeType() )
> >        {
> >                n = node->getFirstChild()->getNodeValue();
> >                xmlval = xercesc::XMLString::transcode(n);
> >                szXmlVal = xmlval;
> >                xercesc::XMLString::release(&xmlval);
> >                xercesc::XMLString::release(n);
> >        }
> >
> >
> >        delete parser;
> >        delete [] xmlval;
> >        delete errHandler;
> >        return szXmlVal;
>
>- you don't need to call xercesc::XMLString::release(n) as the node
>value is owned by the DOMNode;
>- you don't need to call delete [] xmlval as you already released it
>using xercesc::XMLString::release(&xmlval)
>- what you need to do is to release the argument of getElementsByTagName
>e.g.
>
>XMLCh* tag=XMLString::transcode(szTag.c_str());
>list = xmlDoc->getElementsByTagName( tag );
>XMLString::release(&tag);
>
>Alberto
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>



Reply via email to