Example #1
0
bool ParseMarkupXml(const char *xml, MarkupParserCallback *cb)
{
    ParserState *state = new ParserState(xml, cb);
    bool ok = ParseXml(state);
    delete state;
    return ok;
}
Example #2
0
File: xml.cpp Project: nysanier/fn
int main()
{
	std::string strXml;
	//CreateXml(strXml);
	ReadXml(strXml);
	ParseXml(strXml);

	return 0;
}
Example #3
0
Node *
ReadFile
(
   const char * fileName
)
{
   IStream * pStream;
   IXmlReader * pReader;

   HANDLE fileHandle = CreateFile(fileName, FILE_GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr);
   if (fileHandle == INVALID_HANDLE_VALUE)
   {
      Fatal("Cannot open XML file %s", fileName);
   }

   if (FAILED(CreateStreamOnHandle(fileHandle, &pStream)))
   {
      Fatal("Cannot create stream from file");
   }

   if (FAILED(CreateXmlReader(__uuidof(IXmlReader), (void**) &pReader, nullptr)))
   {
      Fatal("Cannot create XML reader");
   }

   if (FAILED(pReader->SetProperty(XmlReaderProperty_DtdProcessing, DtdProcessing_Prohibit)))
   {
      Fatal("Cannot prohibit DTD processing");
   }

   if (FAILED(pReader->SetInput(pStream)))
   {
      Fatal("Cannot set XML reader input");
   }

   Node * topNode;
   if (FAILED(ParseXml(pReader, &topNode)))
   {
      unsigned int line, linePos;
      pReader->GetLineNumber(&line);
      pReader->GetLinePosition(&linePos);
      fprintf(
         stderr,
         "Error on line %d, position %d in \"%s\".\n",
         line,
         linePos,
         fileName);
      Fatal("Error parsing XML");
   }

   SAFERELEASE(pReader);
   SAFERELEASE(pStream);
   CloseHandle(fileHandle);

   return topNode;
}
Example #4
0
    bool BilibiliParser::ParseFileSource(const wchar_t* filePath) {
        std::ifstream file;
        file.open(filePath, std::ios::in || std::ios::binary || std::ios::ate);
        if (file.fail())
            return false;

        file.seekg(0, std::ios::end);
        size_t length = static_cast<size_t>(file.tellg());

        std::string buffer;
        buffer.reserve(length + 1);
        buffer.resize(length);

        file.seekg(0, std::ios::beg);
        file.read(&buffer[0], length);
        file.close();

        return ParseXml(buffer.c_str(), true);
    }
void ClientSocket::OnReceive(int nErrorCode)
{
	// TODO:  在此添加专用代码和/或调用基类
	char *pData = NULL;
	
	//pData = new char[10240];
	//memset(pData, 0, sizeof(char)*10240);
	External_Mag_Head msgHead;
	int msgLen = sizeof(External_Mag_Head);
	UINT leng = 0;
	CString strDoc;
	pData = new char[msgLen];
	memset(pData, 0, sizeof(char)*msgLen);
	SetTimeOut(3000);
	leng = Receive(pData, msgLen, 0);
	KillTimeOut();
	AsyncSelect(FD_READ);
	memcpy(&msgHead, pData, msgLen);
	free(pData);
	pData = new char[msgHead.load_len + 1];
	
	memset(pData, 0, sizeof(char)*msgHead.load_len + 1);
	SetTimeOut(3000);
	leng = Receive(pData, msgHead.load_len, 0);
	KillTimeOut();
	AsyncSelect(FD_READ);
	//char *p_msgBody = (char*)malloc(sizeof(char)*msgHead.load_len);
	//memset(p_msgBody, 0, sizeof(char)*msgHead.load_len);
	//memcpy(p_msgBody, pData + msgLen, sizeof(char)*msgHead.load_len);
	strDoc = StringConvertor::Utf8ToWide(pData);
	m_xml.SetDoc(strDoc);
	ParseXml(m_xml);
	/*DWORD *pParams = new DWORD[2];
	pParams[0] = (DWORD)this;
	pParams[1] = (DWORD)pData;
	m_hThread = ::CreateThread(NULL, NULL, ParseXml, (LPVOID*)(pParams), NULL, NULL);*/
	
	delete pData;
	CSocket::OnReceive(nErrorCode);
}
Example #6
0
 bool BilibiliParser::ParseFileSource(const char* filePath) {
     file<> xmlFile(filePath);
     return ParseXml(xmlFile.data(), true);
 }
Example #7
0
 bool BilibiliParser::ParseStringSource(const char* str) {
     return ParseXml(str);
 }
void FPackage::SetData(
	const uint8*& BinaryBuffer,
	const int32 BinaryBufferSize,
	const FString& FilePath)
{
	// save the sbsar
	LinkData.reset(
		new Details::LinkDataAssembly(
			BinaryBuffer,
			BinaryBufferSize));

	{
		int32 Err = 0;

		// grab the xmls using the linker
		SubstanceLinkerContext *context;

		SubstanceLinkerContextInitEnum mode = Substance_Linker_Context_Init_NonMobile;
#if IPHONE
		mode = Substance_Linker_Context_Init_Mobile;
#endif

		Err = Substance::gAPI->SubstanceLinkerContextInit(&context, mode);

		if (Err)
		{
			GWarn->Log((*FString::Printf(TEXT("Substance: error while initializing the linker context(%d)"), Err)));
			return;
		}

		Err = Substance::gAPI->SubstanceLinkerContextSetXMLCallback(context, (void*)linkerCallbackArchiveXml);
		if (Err)
		{
			GWarn->Log((*FString::Printf(TEXT("Substance: linker error (%d)"), Err)));
			return;
		}

		if (Err)
		{
			GWarn->Log((*FString::Printf(TEXT("Substance: linker error (%d)"), Err)));
			return;
		}

		SubstanceLinkerHandle *handle;
		Err = Substance::gAPI->SubstanceLinkerHandleInit(&handle,context, 0);
		if (Err)
		{
			GWarn->Log((*FString::Printf(TEXT("Substance: linker error (%d)"), Err)));
			return;
		}

		linkerArchiveXmlContent.Empty();

		Err	= Substance::gAPI->SubstanceLinkerPushMemory(
			handle,
			(const char*)BinaryBuffer,
			BinaryBufferSize);
		if (Err)
		{
			GWarn->Log(TEXT("Substance: invalid assembly, cannot import file."));
			return;
		}

		// Release
		Err = Substance::gAPI->SubstanceLinkerRelease(handle, context);
		if (Err)
		{
			GWarn->Log((*FString::Printf(TEXT("Substance: linker error (%d)"), Err)));
			return;
		}
	}

	// try to parse the xml file
	if (false == ParseXml(linkerArchiveXmlContent))
	{
		// abort if invalid
		GWarn->Log( TEXT("Substance: error while parsing xml companion file."));
		return;
	}

	Substance::List<graph_desc_t*>::TIterator itG(Graphs.itfront());
	for (; itG ; ++itG)
	{
		(*itG)->Parent = this;

		Substance::List<output_desc_t>::TIterator itO((*itG)->OutputDescs.itfront());
		for (; itO ; ++itO)
		{
			Details::LinkDataAssembly *linkdata = 
				(Details::LinkDataAssembly *)LinkData.get();

			linkdata->setOutputFormat(
				(*itO).Uid,
				(*itO).Format);
		}
	}

	SourceFilePath = FilePath;
	SourceFileTimestamp = IFileManager::Get().GetTimeStamp( *FilePath ).ToString();
}
INT32 CInvUpload::CommunicationProc(void* pDataIn, void* pDataOut, string &strErr)
{
	INT32 res = 0;

	NoteData_Para noteData;
	noteData.m_appType = NET_FPSC;	//此处设置业务类型
	DataOutType dataOut(g_Xml_OutBuf_Inv, PROTOCOL_OUT_BUFF_LEN);
	res = BuildXml(pDataIn, &dataOut, &noteData, strErr);
	DBG_PRINT(("res = %u", res));
	if (res != SUCCESS)
	{
		return res;
	}
	
	DBG_PRINT(("outLen = %d", dataOut.outLen));

	//////////////////////////////////////////////////////////////////////////
	//此处为处理流程,将上面组织的数据发送给库SSL接口,接收到的数据放入g_Xml_OutBuf_Inv中。
	//////////////////////////////////////////////////////////////////////////
#if SSL_USE_TYPE == 1
	int rec_len = PROTOCOL_OUT_BUFF_LEN;
	CTechnologyMsg pTechMsg;
	string strTechMsg("");

	pTechMsg.m_nsrsbh = g_gNetArg->m_nsrsbh;
	pTechMsg.m_servIP = g_gNetArg->m_servIP;
	pTechMsg.m_servPort = g_gNetArg->m_servPort;
	pTechMsg.m_passWord = g_gNetArg->m_strzskl;
	pTechMsg.m_certPwd = g_gNetArg->m_strzskl;
	pTechMsg.m_servId = TECH_MSG_SERV_ID_INV;
	if(g_gNetArg->m_servId != "")
	{
		pTechMsg.m_servId = g_gNetArg->m_servId;
	}
	GetTechMsgStr(&pTechMsg, strTechMsg);
	UINT8 errBuf[1024];
	memset(errBuf, 0, sizeof(errBuf));

// 	printf("------------------------send-------------------------------------\n");
// 	DBG_PRINT(("dataOut.outLen = %d", dataOut.outLen));
// 	printf("%s\n", g_Xml_OutBuf_Inv);
// 	printf("\n----------------------send---------------------------------------\n");

	int retval = 0;
#if NET_LOCK_FLAG == 1
	CJSKInfoFunc::MutexLock();
#endif
	retval=aisino_ssl_transfer_call(SSL_AUTH_CODE,(char*)strTechMsg.c_str(),strTechMsg.size(),
		(unsigned char*)g_Xml_OutBuf_Inv,dataOut.outLen,(unsigned char*)g_Xml_ExchangeBuf_Inv,&rec_len,errBuf);
#if NET_LOCK_FLAG == 1
	CJSKInfoFunc::MutexUnlock();
#endif
	DBG_PRINT(("retval = %d", retval));
	if( retval != 0)
	{
		DBG_PRINT(("errBuf = %s", errBuf));
		//strErr = (INT8 *)errBuf;
		strErr = "网络通信错误!";
		return retval;
	}

	DBG_PRINT(("rec_len = %d", rec_len));
	dataOut.fill(g_Xml_ExchangeBuf_Inv, rec_len);
	memset(g_Xml_ExchangeBuf_Inv, 0, PROTOCOL_OUT_BUFF_LEN);

#ifdef XML_DEBUG_OUT
	printf("--------------------------CInvUpload rec begin-----------------------------------\n");
	DBG_PRINT(("rec_len = %d", rec_len));
	printf("%s\n", g_Xml_OutBuf_Inv);
	printf("\n------------------------CInvUpload rec end-------------------------------------\n");
#endif
#endif

	res = ParseXml(pDataOut, &dataOut, &noteData, strErr);
	DBG_PRINT(("res = %d", res));
	if (res != SUCCESS)
	{
		return res;
	}
	
	return SUCCESS;
}
Example #10
0
void GlobalHiScoreDb::HandleResponseFromServer(const std::string& response)
{
  HiScoreVec vec;
  PXml xml = ParseXml(response.c_str());
  /*
   Example response:
   <hiscores>
     <hi>
       <score>200</score>
       <nick>Jay</nick>
       <level>2</level>
       <depth>3</depth>
       <pos>
         <x>12</x> <y>34</y> <z>56</z>
       </pos>
     </hi>
   </hiscores>
  */
  
  xml = xml.getChildNode("hiscores");
  if (!xml.isEmpty())
  {
    int n = xml.nChildNode();
    for (int i = 0; i < n; i++)
    {
      PXml xhi = xml.getChildNode(i);
      if (!xhi.isEmpty())
      {
        PXml xscore = xhi.getChildNode("score");
        if (!xscore.isEmpty())
        {
          int score = ToInt(xscore.getText());
          PXml xnick = xhi.getChildNode("nick");
          if (!xnick.isEmpty())
          {
            std::string nick = xnick.getText();
            PXml xlevel = xhi.getChildNode("level");
            if (!xlevel.isEmpty())
            {
              int level = ToInt(xlevel.getText());
              PXml xdepth = xhi.getChildNode("depth");
              if (!xdepth.isEmpty())
              {
                int depth = ToInt(xdepth.getText());
                PXml xpos = xhi.getChildNode("pos");
                if (!xpos.isEmpty())
                {
                  PXml xx = xpos.getChildNode("x");
                  PXml xy = xpos.getChildNode("y");
                  PXml xz = xpos.getChildNode("z");
                  if (!xx.isEmpty() && !xy.isEmpty() && !xz.isEmpty())
                  {
                    Vec3f pos(ToFloat(xx.getText()), ToFloat(xy.getText()), ToFloat(xz.getText()));
                    // Nickname is stored encoded in server DB
                    Hi hi(score, level, depth, DecodeStr(nick), pos);
                    vec.push_back(hi);
                    continue;
                  }
                }
              }
            }
          }
        }
      }
#ifdef _DEBUG
      std::cout << "ERROR (1) parsing hi scores XML from server!\n";
#endif
      return;
    }
  }
  else
  {
#ifdef _DEBUG
    std::cout << "ERROR (2) parsing hi scores XML from server!\n";
#endif
    return;
  }
  
  m_global.SetVec(vec);
  
  // Save locally so we can show something if we lose connectivity later
  m_global.Save(FILENAME_GLOBAL);
  
  // Remove local hi scores which are in the response
  for (const Hi& hi : vec)
  {
    m_local.RemoveHiScore(hi);
  }
  
  m_local.Save(FILENAME_LOCAL);
}
Example #11
0
UINT CUpdateMgr::MyCheckUpdateThreadProc()
{
	if (true == DownLoadServerUpdateXmlFile())
	{
		string ServerXml = m_SingleDownLoad.GetMemBuf();
		g_Logger.Debug(__FILE__,__LINE__,"解析服务器端xml文件 %s",ServerXml.c_str());
		ParseXml(ServerXml,SERVER,PARSE_TYPE_MEMORY);
	}
#ifdef _UNICODE
	USES_CONVERSION;
	ParseXml(W2A(LOCALXMLCONFIG),LOCAL,PARSE_TYPE_FILE);
#else
	ParseXml(LOCALXMLCONFIG,LOCAL,PARSE_TYPE_FILE);
#endif


	map<string,SERVER_XML_INFO*>::iterator ServerIter;
	map<string,LOCAL_XML_INFO*>::iterator LocalIter;
	BOOL bAppendLst=FALSE;
	CString strCurDirectory;
	ClearLocalXml_Tmp();
	g_Logger.Debug(__FILE__,__LINE__,"m_MapServerXmlInfo Count %d",m_MapServerXmlInfo.size());
	g_Logger.Debug(__FILE__,__LINE__,"m_MapLocalXmlInfo Count %d",m_MapLocalXmlInfo.size());
	for(ServerIter = m_MapServerXmlInfo.begin(); ServerIter != m_MapServerXmlInfo.end(); ServerIter++)
	{
		SERVER_XML_INFO* lpSerXmlInfo =(SERVER_XML_INFO*)ServerIter->second;
		LOCAL_XML_INFO* lpLocalXmlInfo =NULL;
		LocalIter = m_MapLocalXmlInfo.find(ServerIter->first);
		if (LocalIter != m_MapLocalXmlInfo.end())
		{
			//找到
			lpLocalXmlInfo = (LOCAL_XML_INFO*)LocalIter->second;
			if(strcmp(lpSerXmlInfo->md5.c_str(),lpLocalXmlInfo->md5.c_str())!=0)
			{
				bAppendLst = TRUE;
			}
			else
			{
				g_Logger.Debug(__FILE__,__LINE__,"md5 值一致不需要加入更新列表 %s",lpLocalXmlInfo->fileName.c_str());
			}
		}
		else
		{		
			//说明没找到,添加到更新列表中
			//m_UpdateList.push_back(ServerIter->second);
			bAppendLst = TRUE;
		}

		if (bAppendLst)
		{
			USES_CONVERSION;
			//说明md5不一致,需要更新,添加到更新列表中
			//SERVER_XML_INFO* lpServerXmlInfo = (SERVER_XML_INFO*)ServerIter->second;
			LPMULTI_DOWNLOAD_INFO lpMultiDownLoad = new MULTI_DOWNLOAD_INFO;
			memset(lpMultiDownLoad,0,sizeof(MULTI_DOWNLOAD_INFO));

			wstring wsCurDirectory;
			CEnvironment::Env_GetCurrentDirectory(wsCurDirectory);
			strCurDirectory.Format(_T("%s\\%s%s\\"),wsCurDirectory.c_str(),UPDATEFOLDER, s2ws(m_serverUpdateTime).c_str());

#ifdef _UNICODE
			_tcscpy(lpMultiDownLoad->filename,A2W(lpSerXmlInfo->fileName.c_str()));
			//_tcscpy((lpMultiDownLoad->url).c_str(),A2W(lpSerXmlInfo->url.c_str()));
			strcpy(lpMultiDownLoad->url,lpSerXmlInfo->url.c_str());
			_tcscpy(lpMultiDownLoad->fileSavePath,strCurDirectory.GetBuffer(0));
#else
			_tcscpy(lpMultiDownLoad->filename,(lpSerXmlInfo->fileName.c_str()));
			_tcscpy(lpMultiDownLoad->url,(lpSerXmlInfo->url.c_str()));
			_tcscpy(lpMultiDownLoad->fileSavePath,strCurDirectory.GetBuffer(0));
#endif
			LOCAL_XML_INFO* lpNewLocalXmlInfo = new LOCAL_XML_INFO;
			memset(lpNewLocalXmlInfo,0,sizeof(LOCAL_XML_INFO));
			lpNewLocalXmlInfo->fileName =lpSerXmlInfo->fileName;
			lpNewLocalXmlInfo->lastVersion=lpSerXmlInfo->lastVersion;
			lpNewLocalXmlInfo->md5=lpSerXmlInfo->md5;
			lpNewLocalXmlInfo->size=lpSerXmlInfo->size;	

			g_Logger.Debug(__FILE__,__LINE__,"加入更新列表,%s",lpNewLocalXmlInfo->fileName);
			m_LocalXmlTmpList.push_back(lpNewLocalXmlInfo);

			m_UpdateList.push_back(lpMultiDownLoad);

			bAppendLst=FALSE;
		}
	}

	if (m_UpdateList.size()>0)
	{
		BOOL bRet = MakeSureDirectoryPathExists(W2A(strCurDirectory.GetBuffer(0)));
		if (!bRet)
		{
			DWORD dwErr = GetLastError();
			string strMsg;
			CGlobalFunction::AfxFormatMessageA(dwErr,strMsg);
			g_Logger.Debug(__FILE__,__LINE__,"创建更新目录 失败 dwErr=%ld,Msg=%s,strCurDirectory=%s",dwErr,strMsg.c_str(), W2A(strCurDirectory.GetBuffer()));
		}
		else
		{
			g_Logger.Debug(__FILE__,__LINE__,"创建更新目录 成功 %s", W2A(strCurDirectory.GetBuffer()));
		}
		
		return SendMessage(AfxGetMainWnd()->m_hWnd, UM_UPDATE,NULL,NULL);
	}
	else
	{
		//没有需要更新的文件,程序退出
		return SendMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,NULL,NULL);
	}
	
	//return DO_NOT_NEEDUPDATE;
}
Example #12
0
void Ve1Req::HandleResult()
{
  m_errorStr.clear();

  bool success = false;

  const HttpResult& res = GetResult();
  if (res.GetSuccess())
  {
    const std::string& str = res.GetString();
    m_xml = ParseXml(str.c_str());

    // For all responses, Child 0 is current server time

    PXml p = m_xml.getChildNode(0);
    if (SafeStrCmp(p.getName(), "now"))
    {
      m_timestamp = p.getText();

      // TODO More checking
      success = true;
    }
    else
    {
      // TODO Get HTTP code
      m_errorStr = m_name + ": Didn't get time stamp in result: " + str;
    }

    if (m_xml.nChildNode() > 1) 
    {
      p = m_xml.getChildNode(1);
      if (SafeStrCmp(p.getName(), "error"))
      {
        m_errorStr = p.getText();
        success = false;
      }
      m_errorCode = "";
      // Check for <errorcode>
      if (m_xml.nChildNode() > 2)
      {
        p = m_xml.getChildNode(1);
        if (SafeStrCmp(p.getName(), "errorcode"))
        {
          m_errorCode = p.getText();
        }
      }
    }
  }
  else
  {
    //m_errorStr = res.GetErrorString();
    m_errorStr = "I don't seem to be able to go online. Is your internet connection working?";
  }

  if (success)
  {
    OnSuccess();
  }
  else
  {
    OnFailure();
  }
}