xml文件如下:
<?xml version="1.0" encoding="GBK" ?>
<response>
<size>3</size>
<message>
<telephone>13800138000</telephone>
<content>trunk zhongluo-cnc average duration to low!</content>
<time>2006-11-14 14:07:35.221121</time>
</message>
<message>
<telephone>13800138000</telephone>
<content>trunk zhongluo-cnc average duration to low!</content>
<time>2006-11-14 14:04:43.268822</time>
</message>
<message>
<telephone>13800138000</telephone>
<content>trunk zhongluo-cnc average duration to low!</content>
<time>2006-11-14 12:18:26.304131</time>
</message>
</response>
其中size字段是指明一共有多少条message,其实这个字段是多余的
本例子是读入字符串来处理的
try
{
HRESULT hr;
IXMLDOMDocument* pXMLDoc;
IXMLDOMNode* pXDN;
IXMLDOMNodeList* pIDOMNodeList = NULL;
IXMLDOMElement* xmlRoot = NULL;
BSTR bstrItemText;
// long value;
i=0;
//COM的初始化
hr=CoInitialize(NULL);
//得到关于IXMLDOMDocument接口的指针pXMLDOC
hr=CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument,(void**) &pXMLDoc);
//将XML字符串转换成UNICODE,然后加载
VARIANT_BOOL bSuccess = false;
//pXMLDoc->loadXML(L"<?xml version=/"1.0/" encoding=/"GBK/"?><response><size>3</size><message><telephone>13560426958</telephone><content>trunk zhongluo-cnc average duration to low!</content><time>2006-11-14 12:18:26.304131</time></message><message><telephone>13560426958</telephone><content>trunk zhongluo-cnc average duration to low!</content><time>2006-11-14 14:07:35.221121</time></message><message><telephone>13560426958</telephone><content>trunk zhongluo-cnc average duration to low!</content><time>2006-11-14 01:09:53.959187</time></message></response>",&bSuccess);
pXMLDoc->loadXML(p,&bSuccess);
//得到已加载的XML字符串,并显示
LPWCH tempxml;
pXMLDoc->get_documentElement(&xmlRoot);//根目录
xmlRoot->get_childNodes(&pIDOMNodeList);//下一层的列表
// if(pIDOMNodeList)
// {MessageBox("成功","pIDOMNodeList",MB_OK);}
// hr = pIDOMNodeList->get_length(&value); //得到所包含的NODE节点的个数
//因为此处是输出参数[out][retval],所以不用new一段空间
/*
pXMLDoc->get_xml(&tempxml);
MessageBoxW(NULL,tempxml,L"XML正文",MB_OK);
*/
//取到<time>,<title>以及<content>节点,并显示结点内容
pXMLDoc->selectSingleNode(L"//size",(IXMLDOMNode **)&pXDN);
pXDN->get_text(&tempxml);
// MessageBoxW(NULL,tempxml,L"size值",MB_OK);
i=_wtoi(tempxml);
if(0==i)
return;
/*
pXMLDoc->selectSingleNode(L"//message",(IXMLDOMNode **)&pXDN);
pXDN->get_text(&tempxml);
MessageBoxW(NULL,tempxml,L"message值",MB_OK);
*/
// pIDOMNodeList->get_item(1,(IXMLDOMNode **)&pXDN);
int j=1;
while(!pIDOMNodeList->get_item(j,(IXMLDOMNode **)&pXDN))
{
// pXDN->get_text(&bstrItemText); //得到该节点相关的文本信息
// ::MessageBoxW(NULL, bstrItemText,L"内容", MB_OK);
IXMLDOMNodeList* pChildNodeList = NULL;
IXMLDOMNode* pChildNode;
pXDN->get_childNodes(&pChildNodeList);
pChildNodeList->get_item(0,(IXMLDOMNode **)&pChildNode);
pChildNode->get_text(&bstrItemText);
::MessageBoxW(NULL, bstrItemText,L"telephone", MB_OK);
pChildNode->Release();
pChildNode = NULL;
pChildNodeList->get_item(1,(IXMLDOMNode **)&pChildNode);
pChildNode->get_text(&bstrItemText);
::MessageBoxW(NULL, bstrItemText,L"content", MB_OK);
pChildNode->Release();
pChildNode = NULL;
pChildNodeList->get_item(2,(IXMLDOMNode **)&pChildNode);
pChildNode->get_text(&bstrItemText);
::MessageBoxW(NULL, bstrItemText,L"time", MB_OK);
pChildNode->Release();
pChildNode = NULL;
pXDN->Release();
pXDN = NULL;
j++;
}
/*
int j=1;
while(j<i)
{
pXMLDoc->selectSingleNode(L"//telephone",(IXMLDOMNode **)&pXDN);
pXDN->get_text(&tempxml);
MessageBoxW(NULL,tempxml,L"telephone",MB_OK);
pXMLDoc->selectSingleNode(L"//content",(IXMLDOMNode **)&pXDN);
pXDN->get_text(&tempxml);
MessageBoxW(NULL,tempxml,L"content",MB_OK);
pXMLDoc->selectSingleNode(L"//time",(IXMLDOMNode **)&pXDN);
pXDN->get_text(&tempxml);
MessageBoxW(NULL,tempxml,L"time",MB_OK);
pXDN->get_text(&bstrItemText); //得到该节点相关的文本信息
::MessageBoxW(NULL, bstrItemText,L"内容", MB_OK);
pXDN->Release();
pXDN = NULL;
// pIDOMNodeList->nextNode((IXMLDOMNode **)&pXDN);
// ((IXMLDOMNode **)&pXDN)++;
j++;
pIDOMNodeList->get_item(2,(IXMLDOMNode **)&pXDN);
}
*/
//释放分配的资源
CoUninitialize();
}//try........
catch(...)
{
AfxMessageBox("错误!");
}