将msxml4.tlh和msxml4.tli这2个文件拷贝到debug文件夹下:下载路径(http://download.csdn.net/source/3372618)
在stdafx.h中添加如下代码:
#import <msxml4.dll>
#define XMLDocPtr MSXML2::IXMLDOMDocumentPtr
#define XMLNodePtr MSXML2::IXMLDOMNodePtr
#define XMLNodeListPtr MSXML2::IXMLDOMNodeListPtr
这样你就可以使用xml库了。
首先导入文件:
//创建XML实例
HRESULT hr;
XMLDocPtr pDoc;
hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if (FAILED(hr))
{
AfxMessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
break;
}
pDoc->load((LPCTSTR)pinfo->strSydb);
现在你可以拿着这个pDoc获得你想要的内容了。
同事封装了2个很好用的函数,在这里和大家分享一下:
//////////////////////////////////////////////////////////////////////////
//获取XML节点的值,函数类型为void,用于获取CString的值
void GetXMLNodeValue(XMLNodePtr pNode, LPCTSTR strDesc, CString& strValue)
{
if (pNode == NULL)
{
strValue = "";
return;
}
//
XMLNodePtr pNodeValue = pNode;
_variant_t v;
if (strDesc != "")
pNodeValue = pNode->selectSingleNode(strDesc);
if (pNodeValue == NULL)
{
strValue = "";
return;
}
v = pNodeValue->GetnodeTypedValue();
strValue = CString(v.bstrVal);
SysFreeString(v.bstrVal);
v.Clear();
}
//////////////////////////////////////////////////////////////////////////
//获取XML节点的值,函数类型为int,用于获取int的值
int GetXMLNodeValue(XMLNodePtr pNode, LPCTSTR strDesc)
{
if (pNode == NULL)
return 0;
//
_variant_t v;
XMLNodePtr pNodeValue = pNode;
CString strValue;
if (strDesc != "")
pNodeValue = pNode->selectSingleNode(strDesc);
if (pNodeValue == NULL)
return 0;
v = pNodeValue->GetnodeTypedValue();
strValue = CString(v.bstrVal);
SysFreeString(v.bstrVal);
v.Clear();
return atoi(strValue);
}
使用方法如下:
如下:
某一个xml的格式如下:
<sport ID="1" Name=“basketball”>
<grade>87</grade>
</sport>
1.某个查询条件下有多个满足条件的键值存在selectNodes函数
CString strFind;
CString str = "sport";
strFind.Format("%s[@ID='%d']", str , nid);
XMLNodeListPtr pList = pDoc->selectNodes((LPCTSTR)strFind);
for (int i = 0; i < pList->Getlength();++i)
{
XMLNodePtr pNode = pList->Getitem(i);
CString sportName = "";
GetXMLNodeValue(pNode, "@Name", sportName );
}
2.某个查询条件下只有1个满足条件的键值存在selectSingleNode函数
CString strFind;
CString str = "sport";
strFind.Format("%s[@ID='%d']", str , nid);
XMLNodePtr pNode = pDoc->selectSingleNode((LPCTSTR)strFind);
if (pNode)
{
int grade = GetXMLNodeValue(pNode, "grade");
}
注意@符号的使用。
好了,就这么简单!