<?xml version="1.0" encoding="utf-8"?>
<LOT>
<LAYOUT NAME="List">
<PARAMETER NAME="ID">No.1</PARAMETER>
<PARAMETER NAME="Number">123456</PARAMETER>
<PARAMETER NAME="Name">SZ</PARAMETER>
</LAYOUT>
</LOT>
stdafx.h
#import "C:\\Windows\\system32\\msxml6.dll"
using namespace MSXML2;
::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
//a.创建xml文档对象
MSXML2::IXMLDOMDocumentPtr pDoc; //声明xml文档指针
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30)); //实例化xml文档对象
if (SUCCEEDED(hr))
{
CComVariant vPath(strfile);//XML文件的绝对路径
VARIANT_BOOL isSuccessful=pDoc->load(vPath);
if(isSuccessful!=VARIANT_TRUE)
{
AfxMessageBox(_T("load xml wrong!"));
return;
}
else
{
MSXML2::IXMLDOMElement *pRootElement=NULL;
MSXML2::IXMLDOMNode *pRootNode=NULL;
MSXML2::IXMLDOMNamedNodeMap *pAttrMap=NULL;
MSXML2::IXMLDOMNode *pAttrNode=NULL;
MSXML2::IXMLDOMNode *pAddrNode=NULL;
MSXML2::IXMLDOMNodeList *pChildList=NULL;
CString strName,strText;
BSTR bsName,bsText;
hr=pDoc->get_documentElement(&pRootElement);//获取根结点列表
if(SUCCEEDED(hr) && (pRootElement!=NULL))
{
hr=pRootElement->QueryInterface(IID_IXMLDOMNode,(void**)&pRootNode);
if(SUCCEEDED(hr))
{
hr=pRootNode->get_firstChild(&pAddrNode);//获取子结点列表
if(SUCCEEDED(hr) && (pAddrNode!=NULL))
{
pAddrNode->get_attributes(&pAttrMap);//属性值
long length=0;
pAttrMap->get_length(&length);
for(int i=0;i<length;i++)
{
hr=pAttrMap->get_item(i,&pAttrNode);//获取节点
if(SUCCEEDED(hr) && (pAttrNode!=NULL))
{
pAttrNode->get_nodeName(&bsName);//获取节点的名称
pAttrNode->get_text(&bsText);//获取结点的值
//NAME="List"
strName=bsName;
strText=bsText;
SysFreeString(bsName);
SysFreeString(bsText);
}
pAddrNode->get_childNodes(&pChildList);//获取子节点列表
long n=0;
pChildList->get_length(&n);
MSXML2::IXMLDOMNode *pChildNode=NULL;
MSXML2::IXMLDOMNamedNodeMap *pChildNodeMap=NULL;
CString strName1,strText1;
BSTR bsName1,bsText1;
for(int i=0;i<n;i++)
{
hr=pChildList->get_item(i,&pChildNode);//获取节点
if(SUCCEEDED(hr) && (pChildNode!=NULL))
{
pChildNode->get_attributes(&pChildNodeMap);//
long nn=0;
pChildNodeMap->get_length(&nn);
for(int i=0;i<nn;i++)
{
hr=pChildNodeMap->get_item(i,&pAttrNode);//获取节点
if(SUCCEEDED(hr) && (pAttrNode!=NULL))
{
pAttrNode->get_nodeName(&bsName);//获取节点的名称
pAttrNode->get_text(&bsText);//获取结点的值
strName=bsName;
strText=bsText;//ID,Number,Name
pChildNode->get_nodeName(&bsName1);//获取节点的名称
pChildNode->get_text(&bsText1);//获取结点的值
strName1=bsName1;
strText1=bsText1;//No.1,123456,SZ
SysFreeString(bsName1);
SysFreeString(bsText1);
SysFreeString(bsName);
SysFreeString(bsText);
}
}
}
}
pChildNode->Release();
pChildNodeMap->Release();
}
}
}
}
pRootElement->Release();
pRootNode->Release();
pAttrMap->Release();
pAttrNode->Release();
pAddrNode->Release();
pChildList->Release();
}
pDoc.Release();
}
else
{
AfxMessageBox(_T("加载XML错误"));
}
::CoUninitialize();//卸载COM