【VC开源代码栏目提醒】:网学会员--在 VC开源代码编辑为广大网友搜集整理了:XMLTest.cpp绩等信息,祝愿广大网友取得需要的信息,参考学习。
// XMLTest.cpp : 定义 DLL 应用程序的入口点。
//
#include "stdafx.h"
//添加智能指针
_COM_SMARTPTR_TYPEDEF(IXMLDOMDocument,__uuidof(IXMLDOMDocument));
_COM_SMARTPTR_TYPEDEF(IXMLDOMElement,__uuidof(IXMLDOMElement));
_COM_SMARTPTR_TYPEDEF(IXMLDOMNodeList,__uuidof(IXMLDOMNodeList));
_COM_SMARTPTR_TYPEDEF(IXMLDOMNode,__uuidof(IXMLDOMNode));
// 对于 WebDbg.exe 的自定义断言和跟踪处理
#ifdef _DEBUG
CDebugReportHook g_ReportHook;
#endif
#include "XMLTest.h"
[ module(name="MyXMLTest", type="dll") ]
class CDllMainOverride
{
public:
BOOL WINAPI DllMain(DWORD dwReason, LPVOID lpReserved)
{
#if defined(_M_IX86)
if (dwReason == DLL_PROCESS_ATTACH)
{
// 堆栈溢出处理
程序 _set_security_error_handler( AtlsSecErrHandlerFunc );
}
#endif
return __super::DllMain(dwReason, lpReserved);
}
};
HTTP_CODE CXMLTestHandler::DoShowTitle(void)
{
m_HttpResponse <<"周办公费用统计表";
return HTTP_SUCCESS;
}
HTTP_CODE CXMLTestHandler::DoShowName(void)
{
if(m_start)
{
m_HttpResponse << static_cast<char*>(m_name);
}
return HTTP_SUCCESS;
}
HTTP_CODE CXMLTestHandler::DoShowPrice(int* num)
{
if(m_start)
{
CString output;
output.Format("%10.2f",m_price[*num]);
m_HttpResponse <<output;
}
return HTTP_SUCCESS;
}
HTTP_CODE CXMLTestHandler::DoShowTotal(void)
{
if(m_start)
{
m_total=m_price[0]+m_price[1]+m_price[2]+m_price[3]+m_price[4];
CString output;
output.Format("%10.2f",m_total);
m_HttpResponse <<output;
}
return HTTP_SUCCESS;
}
HTTP_CODE CXMLTestHandler::DoLoop(void)
{
if(GetProductData())
{
return HTTP_SUCCESS;
}else
{
return 1;
}
}
bool CXMLTestHandler::GetProductData(void)
{
bool loop=false;
HRESULT hr=S_OK;
IXMLDOMDocumentPtr ptrXMLFile=NULL;
hr=ptrXMLFile.CreateInstance(CLSID_DOMDocument);
if(SUCCEEDED(hr)&& ptrXMLFile!=NULL)
{
CString path;
//获取文件路径
m_HttpRequest.GetPhysicalPath(path);
path.Append("Product.
xml");
VARIANT_BOOL vbLoaded=VARIANT_FALSE;
//加载XML
文档 ptrXMLFile->put_async(VARIANT_FALSE);
ptrXMLFile->load(_variant_t(path),&vbLoaded);
if(SUCCEEDED(hr)&&vbLoaded==VARIANT_TRUE)
{
//XML元素接口指针,初始指向根节点
IXMLDOMElementPtr ptrDocRoot =NULL;
hr=ptrXMLFile->get_documentElement(&ptrDocRoot);
if(SUCCEEDED(hr)&&ptrDocRoot!=NULL)
{
IXMLDOMNodeListPtr ptrProductList=NULL;
//获取子节点链表
hr=ptrDocRoot->get_childNodes(&ptrProductList);
if(SUCCEEDED(hr)&&ptrProductList!=NULL)
{
long productNum=0;
//获取子节点链表中的节点个数
hr=ptrProductList->get_length(&productNum);
if(SUCCEEDED(hr)&&productNum)
{
IXMLDOMNodePtr ptrProduct=NULL;
static long NodeNum=0;
//获取子节点链表中指定节点的指针
hr=ptrProductList->get_item(NodeNum,&ptrProduct);
loop=true;
NodeNum++;
if(NodeNum>productNum)
{ loop=false;}
if(SUCCEEDED(hr)&&ptrProduct!=NULL)
{
IXMLDOMNodePtr Field=NULL;
_bstr_t bField;
BSTR Text=NULL;
//获取name节点的文本
bField="name";
hr=ptrProduct->selectSingleNode(bField,&Field);
if(SUCCEEDED(hr)&&Field!=NULL)
{
Field->get_text(&Text);
m_name=Text;
Text=NULL;
Field=NULL;
}
//获取price1节点的文本
bField="price1";
hr=ptrProduct->selectSingleNode(bField,&Field);
CString S1;
char* S2;
if(SUCCEEDED(hr)&&Field!=NULL)
{
Field->get_text(&Text);
S1=Text;
S2=(char*)(LPSTR)(LPCSTR)S1;
m_price[0]=atof(S2);
SysFreeString(Text);
Text=NULL;
Field=NULL;
}
//获取price2节点的文本
bField="price2";
hr=ptrProduct->selectSingleNode(bField,&Field);
if(SUCCEEDED(hr)&&Field!=NULL)
{
Field->get_text(&Text);
S1=Text;
S2=(char*)(LPSTR)(LPCSTR)S1;
m_price[1]=atof(S2);
SysFreeString(Text);
Text=NULL;
Field=NULL;
}
//获取price3节点的文本
bField="price3";
hr=ptrProduct->selectSingleNode(bField,&Field);
if(SUCCEEDED(hr)&&Field!=NULL)
{
Field->get_text(&Text);
S1=Text;
S2=(char*)(LPSTR)(LPCSTR)S1;
m_price[2]=atof(S2);
SysFreeString(Text);
Text=NULL;
Field=NULL;
}
//获取price4节点的文本
bField="price4";
hr=ptrProduct->selectSingleNod