bool XMLSceneryReader::openFile(const char* fileName) { bool result = false; XercesDOMParser* parser = new XercesDOMParser; parser->setValidationScheme(XercesDOMParser::Val_Never); parser->setDoSchema(false); parser->setLoadExternalDTD(false); parser->setErrorHandler(new XMLSceneryErrorHandler); parser->parse(LocalFileInputSource(XMLString::transcode(fileName))); if(!parser->getErrorCount()) { m_root = parser->getDocument()->getFirstChild(); m_node = m_root; result = true; } return result; }
void SYSTEM::CXMLConfiguration::Parse(std::string xmlcontent) { // ÅäÖýâÎö¹æÔò static const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull }; impl = DOMImplementationRegistry::getDOMImplementation(gLS); if(!impl) return; // throw CException(GET_TEXT(ERR_XML_DOM_IMPLEMENTATION)); if(parser == NULL) parser = new XercesDOMParser; XercesDOMParser* xmlparser = (XercesDOMParser*)parser; xmlparser->setValidationScheme(XercesDOMParser::Val_Never); xmlparser->setLoadExternalDTD(false); xmlparser->setDoNamespaces(false); xmlparser->setDoSchema(false); xmlparser->setValidationSchemaFullChecking(false); xmlparser->setCreateEntityReferenceNodes(false); xmlparser->setIncludeIgnorableWhitespace(false); xmlparser->resetDocumentPool(); //ÖØÖÃÎĵµ»º³å³Ø MemBufInputSource input((XMLByte*) xmlcontent.c_str(), xmlcontent.size(), "memory"); xmlparser->parse(input); doc = xmlparser->getDocument(); if(doc) itemElement = ((XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument*)doc)->getDocumentElement(); //¸³Óè¸ù½Úµã else return; // throw CException(boost::str(boost::format(GET_TEXT(ERR_PARSE_CONFIG_FILE)) % xmlcontent)); }
// 解析TMS返回xml bool CTMSSensor::ParseXmlFromTMS(std::string &retXml,int &nRet) { XercesDOMParser *ptrParser = new XercesDOMParser; ptrParser->setValidationScheme( XercesDOMParser::Val_Never ); ptrParser->setDoNamespaces( true ); ptrParser->setDoSchema( false ); ptrParser->setLoadExternalDTD( false ); InputSource* ptrInputsource = new MemBufInputSource((XMLByte*)retXml.c_str(), retXml.size(), "bufId"); try { ptrParser->parse(*ptrInputsource); DOMDocument* ptrDoc = ptrParser->getDocument(); // 读取ret节点 DOMNodeList *ptrNodeList = ptrDoc->getElementsByTagName(C2X("ret")); if(ptrNodeList == NULL) { LOGIDFMT(ULOG_ERROR,ERROR_PARSE_MONITORSTATE_XML,"ParseXmlFromTMS:ret"); return false; } else { if(ptrNodeList->getLength() == 0) { LOGIDFMT(ULOG_ERROR,ERROR_PARSE_MONITORSTATE_XML,"ParseXmlFromTMS:ret"); return false; } DOMNode* ptrNode = ptrNodeList->item(0); char* pstate = XMLString::transcode(ptrNode->getFirstChild()->getNodeValue()); std::string str_state = pstate; if(!str_state.empty()) { nRet = atoi(str_state.c_str()); } XMLString::release(&pstate); //LOGINFFMT("%s,%s\n",str_name.c_str(),str_state.c_str()); } } catch( XMLException& e ) { char* message = XMLString::transcode( e.getMessage() ); XMLString::release( &message ); LOGIDFMT(ULOG_ERROR,ERROR_PARSE_MONITORSTATE_XML,message); delete ptrParser; ptrInputsource = NULL; delete ptrInputsource; ptrParser = NULL; } delete ptrParser; delete ptrInputsource; ptrInputsource = NULL; ptrParser = NULL; return true; }
//initialize a ResultXML object using an existing xml file ResultXML::ResultXML(const char *file) { //sets-up for XML processing and handle any errors if unsuccessful try{ XMLPlatformUtils::Initialize(); } catch (XMLException &e){ char *msg = XMLString::transcode(e.getMessage()); XERCES_STD_QUALIFIER cerr << "Error During Initialization: " << endl << msg; XMLString::release(&msg); } catch (...){ cerr << "Error Unknown Exception Encountered!" << endl; } //create a parser and set it to validate document but not load a DTD or use a schema XercesDOMParser *parser = new XercesDOMParser(); parser->setValidationScheme(XercesDOMParser::Val_Always); parser->setDoSchema(false); parser->setLoadExternalDTD(false); try{ //create unicode strings to for later use XMLCh *spdName = XMLString::transcode("speed_result"); XMLCh *memName = XMLString::transcode("memory_result"); XMLCh *sectName = XMLString::transcode("section_list"); XMLCh *fname = XMLString::transcode(file); //set the save location, parse the file and retrieve the required nodes ftarget = new LocalFileFormatTarget(fname); parser->parse(file); doc = parser->getDocument(); root = doc->getDocumentElement(); DOMNodeList *nlist = root->getChildNodes(); //go through the nodelist finding the top level child nodes and assign them to the right member variables for(XMLSize_t i=0; i<nlist->getLength(); i++){ DOMNode *curNode = nlist->item(i); DOMElement *curElm; //safely check for element node before casting if(curNode->getNodeType() == DOMNode::ELEMENT_NODE){ curElm = dynamic_cast<DOMElement*>(curNode); } //check the tag name and assign accordingly if(XMLString::equals(spdName, curElm->getTagName())){ spdResult = curElm; } else if(XMLString::equals(memName, curElm->getTagName())){ memResult = curElm; } else if(XMLString::equals(sectName, curElm->getTagName())){ sectList = curElm; } } //release the memory occupied by the encoded strings XMLString::release(&spdName); XMLString::release(&memName); XMLString::release(§Name); XMLString::release(&fname); } catch (const OutOfMemoryException&){ XERCES_STD_QUALIFIER cerr << "Error Out of Memory Exception: " << XERCES_STD_QUALIFIER endl; } catch (const DOMException& e){ XERCES_STD_QUALIFIER cerr << "Error DOMException Encountered Code: " << e.code << XERCES_STD_QUALIFIER endl; } catch (...){ XERCES_STD_QUALIFIER cerr << "Unknown Error Encountered, Could Not Create Document" << XERCES_STD_QUALIFIER endl; } delete parser; }