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