一,建立一个基于对话框的程序,工程名为xml;二, 初始化OLE.BOOL CXmlApp::InitInstance(){         AfxOleInit();…….} 三, 在对话框中增加一个按钮,ID为IDC_CREATE,我们在这个按钮的响应函数中生成一个xml文件.void CXmlDlg::OnCreate() {         MSXML2::IXMLDOMDocumentPtr pDoc;          MSXML2::IXMLDOMElementPtr  xmlRoot ;         //创建DOMDocument对象
//????不知道为什么创建不起???????         HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         if(!SUCCEEDED(hr)) 
  
         {     
//程序始终进到这里了,不知道为什么会建立不起domdocument对象
//我用的是vc6+win2000ADSserver  装了.netframe  而且在stdafx.h中引用了
//#import "msxml4.dll"  第一次接触,请大家指教                   MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"); 
             return ;//从这里返回了         }                   //根节点的名称为china         pDoc->raw_createElement((_bstr_t)(char*)"china", &xmlRoot);         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"); }

解决方案 »

  1.   

    try{
    IXMLDOMDocument2Ptr pDoc;
    HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
    if(pDoc){
    pDoc->async = false;
    pDoc->resolveExternals = false;
    pDoc->validateOnParse = true;
    }
    else{
    TRACE(_T("Can not Create XML Document \r\n"));
    return FALSE;
    }
      

  2.   

    在调用  HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    之前,或者说调用任何xml接口函数之前,你必须对com进行initialize:
    HRESULT hr;
    hr = CoInitialize(NULL);在所有的调用结束之后,必须进行反初始化:
    CoUninitialize();你是否做了这个工作,否则,绝对无法调用成功.
      

  3.   

    另外,如果你使用了msxml4.0的库,在调用时你需要指定为40,而不是这里的30.
    HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));