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

📄 msxmlparser.cpp

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

#include "stdafx.h"
#include "resource.h"
#include "MSXMLParser.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

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

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

CMSXMLParser::~CMSXMLParser()
{
	CoUninitialize();
}

// 解析服务器发来的策略 [5/12/2008 By willing]
/*
格式:
<POLICY>
<ITEM NAME="DES" VALUE="[0/1]" ALARM="" />
<ITEM NAME="3DES" VALUE="[0/1]" ALARM="" />
<ITEM NAME="ENCTYPE" VALUE="[0/1/2]" ALARM="" />
<ITEM NAME="PWDLEN" VALUE="[4~30]" ALARM="" />
</POLICY>
*/
int CMSXMLParser::ParseConfig(CString strXML,CConfigInfo &ConfigInfo)
{
	// 创建文档对象
	MSXML2::IXMLDOMDocumentPtr pXMLDoc;
	HRESULT hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
	if ( !SUCCEEDED(hr) )
		return FALSE;
	pXMLDoc->put_async(VARIANT_FALSE);//
	pXMLDoc->put_validateOnParse(VARIANT_FALSE);// 校验格式 
	pXMLDoc->put_resolveExternals(VARIANT_FALSE);
	pXMLDoc->put_preserveWhiteSpace(VARIANT_TRUE);// 保留空白字符 
	// 加载文档内容
	DEGBUGLOG("CMSXMLParser","ParseConfig",strXML.GetBuffer(0));
	hr = pXMLDoc->loadXML(strXML.GetBuffer(0));
	strXML.ReleaseBuffer();
	MSXML2::IXMLDOMNodeListPtr pIDOMNodeList = NULL;
	pIDOMNodeList = pXMLDoc->getElementsByTagName("ITEM");
	if (NULL == pIDOMNodeList)
	{
		DEGBUGLOG("CMSXMLParser","ParseConfig","解析文件加密策略时没有找到ITEM");
		return -1;
	}
	long lItemCount = 0;
	hr = pIDOMNodeList->get_length(&lItemCount);
	if (FAILED(hr))
	{
		DEGBUGLOG("CMSXMLParser","ParseConfig","获取ITEM的个数的时候失败");
	}
	CString strMsg = "";
	CString strItemName[4]={"DES","3DES","ENCTYPE","PWDLEN"};
	BOOL bFlag = FALSE;
	CString strValue = "";
	for (int i=0;i<4;i++)
	{
		bFlag = GetValue(pIDOMNodeList,strItemName[i],strValue);
		if (FALSE == bFlag)
		{
			strMsg.Format("解析%s的值时失败!",strItemName);
			DEGBUGLOG("CMSXMLParser","ParseConfig",strMsg);
		}
		ConfigInfo.SetItemValue(strItemName[i],strValue);
	}
	ConfigInfo.SetItemValue("ISUSE","1");
	return 0;
}
BOOL CMSXMLParser::GetValue(MSXML2::IXMLDOMNodeListPtr pIDOMNodeList,CString name,CString& value)
{
	long lSize = 0;
	HRESULT hr ;
	MSXML2::IXMLDOMNodePtr pIDOMNode = NULL;
	CString iName,iValue;

	name.MakeLower();
	hr=pIDOMNodeList->get_length(&lSize);
	if(hr!=S_OK){return FALSE;} 
	
	for (long i = 0 ; i < lSize; i++)
	{
		hr=pIDOMNodeList->get_item(i,&pIDOMNode);
		if(hr!=S_OK){return FALSE;}
		
		iName = GetNodeAttrValue(pIDOMNode,"NAME");
		iName.MakeLower();
		if (iName == name)
		{   
			value = GetNodeAttrValue(pIDOMNode,"VALUE");
			OutputDebugString(iName);
			OutputDebugString(value);
			return TRUE;
		}
	}
	return FALSE;
}
// 得到属性结点的值
CString CMSXMLParser::GetNodeAttrValue(MSXML2::IXMLDOMNodePtr pXMLNode,CString strAttr)
{
	MSXML2::IXMLDOMNodePtr pAttrNode = NULL;
	MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
	_bstr_t bstr ;
	CString str;
	if (pXMLNode == NULL){return "";}

	pAttrs = pXMLNode->attributes;
	if (pAttrs == NULL){return "";}

	pAttrNode = pAttrs->getNamedItem(strAttr.GetBuffer(0));
	if (pAttrNode == NULL){return "";}

	bstr = pAttrNode->Gettext();
	str.Format("%s",bstr.operator char*());

	return str;
}

⌨️ 快捷键说明

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