Hi, I'm trying to use the xerces api to write the contents of my application log. But i'm thinking that my approach is not the best one, i need an approach that can write large amout of data and with a considered speed (this is not the most important, the amount of data is more important and i'm not achiving this objective).
So my approach is the following: 1) first step, i create the xml document if not exist: DOMDocument* pcDoc = impl->createDocument( // root element namespace URI. XMLStr(XML_EXIF_LOG_DTD), XMLStr(XML_EXIF_LOG_ROOT_ELEM_NAME), // root element name 0); and then i save it using the: LocalFileFormatTarget local(m_strLogFileFullName.c_str()); DOMWriter* pcSerializer = impl->createDOMWriter(); pcSerializer->writeNode(&local, *((DOMNode*)pcDoc)); 2) after the xml file is created i open it (maybe my problem is here): xercesc::XercesDOMParser* m_pcDomParser = new xercesc::XercesDOMParser; m_pcDomParser->parse( m_strLogFileFullName.c_str() ) ; and i save the variable m_pcDomParser for future use. 3) when i need to add a new log entry i do the following (this step could be done a lot of times and in a very small interval): xercesc::DOMDocument* pcDoc = m_pcDomParser->getDocument() ; DOMElement* rootElem = pcDoc->getDocumentElement(); DOMElement* pcLogRec = pcDoc->createElement(XMLStr(XML_LOG_RECORD)); rootElem->appendChild(pcLogRec); //... write the values for the correspondig xml elements //then i saved it DOMImplementation* pImp = pcDoc->getImplementation(); LocalFileFormatTarget local(m_strLogFileFullName.c_str()); DOMWriter* pcSerializer = pImp->createDOMWriter(); pcSerializer->writeNode(&local, *((DOMNode*)pcDoc)); <- i thing that the problem of the speed is here because it writes the all xml info to the file each time i do this.... And it's all... The speed is not the desired one, but i can live with this, but my biggest problem is that when i reach aproximilly the 22378 lines in the xml document when i'm doing the following instruction of code: LocalFileFormatTarget local(m_strLogFileFullName.c_str()); the xerces return an xercesc::XMLException saying "Could not open file: ..." Is there any limit of data in an xml file? how i can write more than this limit? And my approach is the best one? exist any problem with this aproach? exist any another way of doing this (a better way)? Thanks -- Nuno Esculcas
