📄 msxmlparser.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 + -