⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msxmlparser.cpp

📁 COM 组建的开发
💻 CPP
字号:
// MSXMLParser.cpp: implementation of the CMSXMLParser class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "resource.h"
#include "MSXMLParser.h"
#import "MSXML4.DLL"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMSXMLParser::CMSXMLParser()
{
	CoInitialize(NULL);
}

CMSXMLParser::~CMSXMLParser()
{
	CoUninitialize();
}
// 解析加密文件的信息 [6/2/2008 By willing]
/*
XML串格式:
<CONFIG>
<ENCTYPE></ENCTYPE>
<ENCMETHOD></ENCMETHOD>
<PWD></PWD>
<HOSTCODE></HOSTCODE>
<FILELEN></FILELEN>
<FILETYPE></FILETYPE>
<FILENAME></FILENAME>
</CONFIG>
*/
int CMSXMLParser::ParseEncFileInfo(const char* pszXml,ENC_FILE_INFO &encFileInfo)
{
	OutputDebugString("CMSXMLParser::ParseEncFileInfo");
	if (NULL == pszXml)	return -1;
		// 创建文档对象
	MSXML2::IXMLDOMDocumentPtr pXMLDoc;
	HRESULT hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
	if ( !SUCCEEDED(hr) )
		return -2;
	pXMLDoc->put_async(VARIANT_FALSE);//
	pXMLDoc->put_validateOnParse(VARIANT_FALSE);// 校验格式 
	pXMLDoc->put_resolveExternals(VARIANT_FALSE);
	pXMLDoc->put_preserveWhiteSpace(VARIANT_TRUE);// 保留空白字符 
	// 加载文档内容
	OutputDebugString("开始加载XML");
	hr = pXMLDoc->loadXML(pszXml);

	_bstr_t bstrTemp;
	// 获取加密类型 [6/2/2008 By willing]
	OutputDebugString("开始获取EncType");
	MSXML2::IXMLDOMNodePtr pRootNode=pXMLDoc->selectSingleNode("CONFIG/ENCTYPE");
	if (pRootNode==NULL)
    {
		OutputDebugString("解析加密类型失败!");
        return -3;
    }
	bstrTemp=pRootNode->Gettext();
	encFileInfo.nEncType = atoi((char*)bstrTemp);
	// 获取加密算法 [6/2/2008 By willing]
	OutputDebugString("开始获取EncMethod");
	pRootNode=pXMLDoc->selectSingleNode("CONFIG/ENCMETHOD");
	if (pRootNode==NULL)
    {
		OutputDebugString("解析加密算法失败!");
        return -4;
    }
	bstrTemp=pRootNode->Gettext();
	encFileInfo.nEncMethod = atoi((char*)bstrTemp);
	// 获取加密密码 [6/2/2008 By willing]
	OutputDebugString("开始获取Pwd");
	pRootNode = pXMLDoc->selectSingleNode("CONFIG/PWD");
	if (NULL == pRootNode)
	{
		OutputDebugString("解析加密密码失败!");
		return -5;
	}
	bstrTemp = pRootNode->Gettext();
	sprintf(encFileInfo.szPwd,"%s",(char*)bstrTemp);
	// 获取HOSTCODE [6/2/2008 By willing]
	OutputDebugString("开始获取HostCode");
	pRootNode = pXMLDoc->selectSingleNode("CONFIG/HOSTCODE");
	if (NULL == pRootNode)
	{
		OutputDebugString("解析硬件特征码失败!");
		return -6;
	}
	bstrTemp = pRootNode->Gettext();
	sprintf(encFileInfo.szHostCode,"%s",(char*)bstrTemp);
	//获取文件长度
	OutputDebugString("开始获取FileLen");
	pRootNode = pXMLDoc->selectSingleNode("CONFIG/FILELEN");
	if (NULL == pRootNode)
	{
		OutputDebugString("解析文件长度失败!");
		return -7;
	}
	bstrTemp = pRootNode->Gettext();
	encFileInfo.lFileLen = atoi((char*)bstrTemp);
	//获取文件类型
	OutputDebugString("开始获取FileType");
	pRootNode = pXMLDoc->selectSingleNode("CONFIG/FILETYPE");
	if (NULL == pRootNode)
	{
		OutputDebugString("解析文件类型失败!");
		return -8;
	}
	bstrTemp = pRootNode->Gettext();
	encFileInfo.strFileType = CString((char*)bstrTemp);
	// 获取文件名称 [6/2/2008 By willing]
	OutputDebugString("开始获取FileName");
	pRootNode = pXMLDoc->selectSingleNode("CONFIG/FILENAME");
	if (NULL == pRootNode)
	{
		OutputDebugString("解析文件名称失败!");
		return -9;
	}
	bstrTemp = pRootNode->Gettext();
	encFileInfo.strFileName = CString((char*)bstrTemp);
	OutputDebugString("从XML中分析到文件名称");
	OutputDebugString(encFileInfo.strFileName);
	OutputDebugString("-------CMSXMLParser::ParseEncFileInfo----------");
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -