1.XMLPlatformUtils::Initialize(); 2.加载xml文件 bool XMLConfig::Load(const std::string &xmlFile) { if (pxmlparser != NULL) { delete pxmlparser; pxmlparser = NULL; } pxmlparser = new XercesDOMParser(); //加载分析报文 pxmlparser->setValidationScheme(XercesDOMParser::Val_Auto); pxmlparser->setDoNamespaces( true ); pxmlparser->setDoSchema( true ); pxmlparser->setLoadExternalDTD( false ); pxmlparser->setIncludeIgnorableWhitespace( false ); pxmlparser->parse(xmlFile.c_str()); pdocument = pxmlparser->getDocument(); pelement = pdocument->getDocumentElement(); return true; } 3.当xml文件格式如下 XMLConfig::strVector XMLConfig::getKeyTextList(DOMNode * pFindNode,const std::string &key) { strVector nodetextlist; string s; while ( pFindNode != NULL) { if ( pFindNode->getNodeType() == DOMNode::ELEMENT_NODE ) { DOMElement* pDepartment = (DOMElement *)pFindNode; char* strValue = XMLString::transcode(pFindNode->getNodeName()) ; if ((string)strValue==key) { nodetextlist.push_back(XMLString::transcode(pFindNode->getFirstChild()->getNodeValue())); } } pFindNode = pFindNode->getNextSibling(); } return nodetextlist ; } XMLConfig::strVector XMLConfig::getKeyTextList(DOMNode * pFindNode,const std::string &key) { strVector nodetextlist; string s; while ( pFindNode != NULL) { if ( pFindNode->getNodeType() == DOMNode::ELEMENT_NODE ) { DOMElement* pDepartment = (DOMElement *)pFindNode; char* strValue = XMLString::transcode(pFindNode->getNodeName()) ; if ((string)strValue==key) { nodetextlist.push_back(XMLString::transcode(pFindNode->getFirstChild()->getNodeValue())); } } pFindNode = pFindNode->getNextSibling(); } return nodetextlist ; } 4当xml文件代码如下 <?xml version="1.0" encoding="UTF-8"?> <config> <local> <listen_port>65002</listen_port> <socket_accept_threads_num>1</socket_accept_threads_num> <socket_timeout_ms>30000</socket_timeout_ms> <encode_type>utf-8</encode_type> </local> <task> <update_token>10</update_token> <update_to_sc_interval>600</update_to_sc_interval> <update_ip_2_smcs_interval>30</update_ip_2_smcs_interval> </task> <sm> <sm_name>127</sm_name> <equip_id>196627</equip_id> <net_id>65536</net_id> </sm> <login_name>sysadmin</login_name> <password>12345</password> <ipaddress>http://192.168.1.22:8080/sc/</ipaddress> <max_link_num>10</max_link_num> <vnms_enable>1</vnms_enable> <vnms_ip>192.168.1.127</vnms_ip> <vnms_port>49998</vnms_port> <downLoadBysmServer_enable>1</downLoadBysmServer_enable> </config> 遍历代码如下: XMLConfig::strVector XMLConfig::getKeyList(const std::string &key) { strVector nodetextlist; char* name; DOMNode *node = (DOMNode*) pdocument->getDocumentElement(); if (node) { if (node->getNodeType() == DOMNode::ELEMENT_NODE) { DOMNodeList *nodelist = node->getChildNodes(); uint32_t listLen = nodelist->getLength(); for(uint32_t i = 0;i<listLen;i++) { DOMNode* nodeTemp = nodelist->item(i); if (nodeTemp->getNodeType() == DOMNode::ELEMENT_NODE) { name = XMLString::transcode(nodeTemp- >getNodeName()); if ((string)name == key) { nodetextlist.push_back(XMLString::transcode(nodeTemp->getFirstChild()->getNodeValue())); } for (DOMNode *childnode = nodeTemp->getFirstChild();childnode !=0;childnode=childnode->getNextSibling()) { name = XMLString::transcode(childnode->getNodeName()); if ((string)name == key) { nodetextlist.push_back(XMLString::transcode(childnode->getFirstChild()->getNodeValue())); } } } } } } return nodetextlist; }