Posted on 2008-08-28 11:53
天之骄子 阅读(643)
评论(0) 编辑 收藏 引用
//定义智能接口指针
#include<comdef.h>
#include<msxml.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));
//IXMLDOMElement 初始化指向根节点;注意相当于数据库database
//IXMLDOMNodeList 子节点链表;注意相当于表table;或者相当于记录recordset
//IXMLDOMNode 子节点链表中指定节点的指针;注意相当于得到表中指定的一条记录,也可以是单个字段
/*
#import <msxml.dll> named_guids
using namespace MSXML;
替代上面
*/
bool GetxmlData(void)
{
bool loop=false;
//XML文档指针
HRESULT hr=S_OK;
IXMLDOMDocumentPtr ptrXMLFile=NULL;
hr=ptrXMLFile.CreateInstance(CLSID_DOMDocument);
if(SUCCEEDED(hr)&& ptrXMLFile!=NULL)
{
//得到XML文件的路径
CStringA path;
m_HttpRequest.GetPhysicalPath(path);
path.Append("Product.xml");
//加载XML文档
VARIANT_BOOL vbLoaded=VARIANT_FALSE;
ptrXMLFile->put_async(VARIANT_FALSE);
ptrXMLFile->load(_variant_t(path),&vbLoaded);
//成功加载后的处理
if(SUCCEEDED(hr)&& vbLoaded==VARIANT_TRUE)
{
//XML文档元素指针,初始化指向根节点;注意相当于数据库database
IXMLDOMElementPtr ptrDocRoot=NULL;
hr=ptrXMLFile->get_documentElement(&ptrDocRoot);
if(SUCCEEDED(hr)&&ptrDocRoot!=NULL)
{
//获取子节点链表;注意相当于表table;或者相当于记录recordset
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;//注意事项记录号index
hr=ptrProductList->get_item(NodeNum,&ptrProduct);
loop=true;
NodeNum++;
if(NodeNum>productNum)
{ loop=false; }
if(SUCCEEDED(hr)&&ptrProduct!=NULL)
{
//单个字段,及name,这里也就是最小标签元素
IXMLDOMNodePtr Field=NULL;
_bstr_t bField;
BSTR Text=NULL;
bField="name";
//获取name元素的内容
hr=ptrProduct->selectSingleNode(bField,&Field);
if(SUCCEEDED(hr)&& Field!=NULL)
{
Field->get_text(&Text);//修改用Field->put_text(&Text);
m_name=Text;
Text=NULL;
Field=NULL;
}
//获取price1元素的内容
bField="price1";
hr=ptrProduct->selectSingleNode(bField,&Field);
CString S1;
wchar_t * S2;
if(SUCCEEDED(hr)&& Field!=NULL)
{
Field->get_text(&Text);
S1=Text;
S2=S1.GetBuffer(S1.GetLength());
S1.ReleaseBuffer();
m_price[0]=_wtof(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=S1.GetBuffer(S1.GetLength());
S1.ReleaseBuffer();
m_price[1]=_wtof(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=S1.GetBuffer(S1.GetLength());
S1.ReleaseBuffer();
m_price[2]=_wtof(S2);
SysFreeString(Text);
Text=NULL;
Field=NULL;
}
//获取price4元素的内容
bField="price4";
hr=ptrProduct->selectSingleNode(bField,&Field);
if(SUCCEEDED(hr)&& Field!=NULL)
{
Field->get_text(&Text);
S1=Text;
S2=S1.GetBuffer(S1.GetLength());
S1.ReleaseBuffer();
m_price[3]=_wtof(S2);
SysFreeString(Text);
Text=NULL;
Field=NULL;
}
//获取price5元素的内容
bField="price5";
hr=ptrProduct->selectSingleNode(bField,&Field);
if(SUCCEEDED(hr)&& Field!=NULL)
{
Field->get_text(&Text);
S1=Text;
S2=S1.GetBuffer(S1.GetLength());
S1.ReleaseBuffer();
m_price[4]=_wtof(S2);
SysFreeString(Text);
Text=NULL;
Field=NULL;
}
ptrProduct=NULL;
}
}
ptrProductList=NULL;
}
ptrDocRoot=NULL;
}
}
ptrXMLFile=NULL;
}
m_start=true;
return loop;
}