/*! * Loads AWS endpoint data from \a xml. * * This function parses AWS endpoint data in XML format. The XML data is * expected to match the same format as the file provided by Amazon at * http://aws-sdk-configurations.amazonwebservices.com/endpoints.xml * * If \e any data has been loaded previously, this function will return * immediately with no parsing performed. */ void AwsEndpointPrivate::loadEndpointData(QXmlStreamReader &xml) { QMutexLocker locker(&mutex); if (!hosts.empty()) { return; // Already loaded. } // Parse the XML data. while (xml.readNextStartElement()) { if (xml.name() == QLatin1String("Regions")) { parseRegions(xml); } else if (xml.name() == QLatin1String("Services")) { parseServices(xml); } else if (xml.name() != QLatin1String("XML")) { qDebug() << "ignoring" << xml.name(); } } if (xml.hasError()) { qWarning() << "AwsEndpoint:" << xml.errorString(); } Q_ASSERT(!xml.hasError()); Q_ASSERT(!hosts.isEmpty()); Q_ASSERT(!regions.isEmpty()); Q_ASSERT(!services.isEmpty()); }
bool GameConfig::parseGameConfig(char *pBuffer, unsigned long nSize) //解析数据流 { m_regionInfos.clear(); m_tableConfigs.clear(); m_goodInfos.clear(); m_servers.m_shardVec.clear(); m_resVersion.clear(); m_vipInfos.clear(); m_mysShops.clear(); m_switchs.clear(); xmlDocPtr pdoc = NULL; xmlNodePtr proot = NULL; xmlNodePtr curNode = NULL; m_gameConfig = string(pBuffer, nSize); pdoc = xmlParseMemory ((char*)pBuffer, nSize); if (pdoc == NULL) { return false; } // 获取 xml 文档对象的根节对象 proot = xmlDocGetRootElement (pdoc); if (proot == NULL) { return false; } curNode = proot->xmlChildrenNode; if (!curNode) { return false; } while (curNode != NULL) { if (xmlStrcmp(curNode->name, BAD_CAST "webs")==0) { parseWebs(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "regions")==0) { parseRegions(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "goods")==0) { parseGoods(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "scenes")==0) { parseScenes(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "servers")==0) { parseServerList(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "givecoins")==0) { parseGaveCoin(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "resources")==0) { parseResVersion(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "vips")==0) { parseVip(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "mysshop")==0) { parseMysShop(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "switchs")==0) { parseSwitchs(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "Languages")==0) { parseLanguages(curNode); } else if (xmlStrcmp(curNode->name, BAD_CAST "commondatas")==0) { parseCommonData(curNode); } curNode = curNode->next; } /* 关闭和清理 */ xmlFreeDoc(pdoc); xmlCleanupParser(); return true; }