建了一个对话框程序,上面放置两个按钮,一个是SaveXML,一个是ReadXML.
在stdafx.h中添加#include "msxml.h"  
#import  "msxml4.dll"
using namespace  MSXML2
后在程序中添加代码:
void CTestXMLDlg::OnBnClickedBtnSave()
{
// TODO: 在此添加控件通知处理程序代码
MSXML2::IXMLDOMDocumentPtr pDoc;           
    MSXML2::IXMLDOMElementPtr xmlRoot;       
    HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));       
    if(!SUCCEEDED(hr))           
    {                                                           
MessageBox(_T("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"));           
    }           
          
    pDoc->raw_createElement((_bstr_t)(char*)"china", &xmlRoot);       
    //MSXML2::IXMLDOMNodePtr     childnode     =     xmlnode;       
    pDoc->raw_appendChild(xmlRoot, NULL);           MSXML2::IXMLDOMElementPtr childNode     ;           pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);       
    childNode->Puttext("WuHan");       
    childNode->setAttribute("population","8,000,000");       
    childNode->setAttribute("area","10000");       
    xmlRoot->appendChild(childNode);           pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);       
    childNode->Puttext("ShangHai");       
    childNode->setAttribute("population","12,000,000");       
    childNode->setAttribute("area","12000");       
    xmlRoot->appendChild(childNode);           pDoc->save("f:\\he.xml");        MessageBox(_T("创建完成已保存,beliede!")); 
}void CTestXMLDlg::OnBnClickedBtnRead()
{
// TODO: 在此添加控件通知处理程序代码
MSXML2::IXMLDOMDocumentPtr pDoc;           
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));       
if(!SUCCEEDED(hr))           
{                                                           
MessageBox(_T("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"));           
}           
pDoc->load("f:\\he.xml");        MSXML2::IXMLDOMElementPtr  childNode;       
childNode = (MSXML2::IXMLDOMElementPtr)(pDoc->selectSingleNode("//City"));        MSXML2::DOMNodeType nodeType;       
childNode->get_nodeType(&nodeType);        BSTR var;       
CString name;       
childNode->get_nodeName(&var);       
name = (char*)(_bstr_t)var;        VARIANT varVal;       
childNode->get_nodeTypedValue(&varVal);       
CString strValue = (_bstr_t)varVal;        MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL;           
MSXML2::IXMLDOMNodePtr pAttrItem;       
childNode->get_attributes(&pAttrs);       
long nCount;       
pAttrs->get_length(&nCount);       
for(int i = 0; i < nCount ; i++)
{
pAttrs->get_item(i,&pAttrItem); BSTR bstrNodeName;
CString strNodeName;
pAttrItem->get_nodeName(&bstrNodeName);
strNodeName=bstrNodeName;
MessageBox(strNodeName);
    }
}然后编译,报告:fatal error C1083: 无法打开类型库文件:“msxml4.dll”: No such file or directory
不知何故(vista环境,vs2008平台,难道vista不该本身就带有这个dll吗?)
然后下载了个msxml 4.0 sp2 sdk安装后,就不报错找不到msxml4.dll了,
却报错:d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdtctl.h(37) : error C2144: 语法错误 : “CMonthCalCtrl”的前面应有“;”
位置在afxdtctl.h文件的这个位置
#ifdef _AFX_MINREBUILD
#pragma component(minrebuild, off)
#endif//CObject
//CCmdTarget;
//CWnd
class CMonthCalCtrl;
class CDateTimeCtrl;#undef AFX_DATA
#define AFX_DATA AFX_CORE_DATA
这是为何????

解决方案 »

  1.   

    4本来就是旧版本 不带也很正常 你可以看下系统的path目录中有没有这个文件 或者去别处拷一个4的dll到当前目录 
      

  2.   

    后来我安装msxml 4.0 sdk之后,编译报错:error C2144: 语法错误 : “CMonthCalCtrl”的前面应有“;” 
    这是怎么回事?
      

  3.   

    #include 和 #import 恐怕只需要一个就够了。vista上的XML已经到版本6,也许需要导入msxml6.dll
      

  4.   

    导入msxml6.dll也还是提示那个错误。不会和我安装了vs2008 sp1工具包有关吧?怎么会提示库文件出错呢?
      

  5.   

    小小的问题:后面加分号,OK
    #include "msxml.h"  
    #import  "msxml4.dll"
    using namespace  MSXML2;