BSTR bsClass;
...
pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
pDoc->put_text(bsClass);
pDoc->save("d:\\he.xml"); 
这样为什么不行
我就想把bsClass里的东西保存到一个xml文件里

解决方案 »

  1.   

    你得先创建一个节点才能给这个节点添加属性和文字等,哪能直接就put_text的啊
      

  2.   

    IXMLDOMDocument也可以直接put_text的,不是只有IXMLDOMNode才能
      

  3.   

    刚自己动手试了下,MSDN中说IXMLDOMDocument有put_text的,但是直接用却用不了,会报错
    还非得createElement一个元素后再写 ::CoInitialize(NULL);// 
    MSXML2::IXMLDOMDocumentPtr pDoc;
    MSXML2::IXMLDOMElementPtr xmlRoot;
    HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    if(!SUCCEEDED(hr))
    {
    cout<<"Error"<<endl;
    return 0;
    }
    BSTR bsClass=::SysAllocString(L"xxxx");
    xmlRoot=pDoc->createElement("xxxx");

    xmlRoot->put_text(bsClass); 
    pDoc->appendChild(xmlRoot);
    //pDoc->createElement("");
    //pDoc->put_text(bsClass); 
    pDoc->save("d:\\he.xml");
    xmlRoot->Release();
    pDoc.Release();
    ::CoUninitialize();
      

  4.   

    奇怪,pDoc的put_text怎么用呢?能用吗?可是为啥MSDN上说有这个方法呢
      

  5.   

    put_text没用明白
    从内存加载到XML应该用loadXML吧
    这个也没成功
    没有提示 但是就是保存不了
    MSXML2::IXMLDOMDocumentPtr pDoc;  //创建DOMDocument对象
    HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    if(!SUCCEEDED(hr)) 
    {
    MessageBox(NULL, _T("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"), _T("错误提示"), MB_OK | MB_ICONWARNING); 
    return FALSE;
    } hr = pDoc->loadXML(bsClass);
    if(!SUCCEEDED(hr)) 
    {
    MessageBox(NULL, _T("loadXML错误"), _T("错误提示"), MB_OK | MB_ICONWARNING); 
    return FALSE;
    } hr = pDoc->save(_variant_t("d:\\he.xml"));  
    if(!SUCCEEDED(hr)) 
    {                
    MessageBox(NULL, "无法保存!", _T("错误提示"), MB_OK | MB_ICONWARNING); 
    return FALSE;
      

  6.   

    你这个不是新建么,不一定要先从内存加载到XML
      

  7.   

    俺一般不用微软的xml解析器,都用自己写的解析器,所以这个问题俺回答不了啊。
      

  8.   

    放进去了 但是我这个字符串已经是xml结构了 放进去后他们都被转义了!
    BSTR bsClass = BSTR(L"<StudyClass><ClassId>1000</ClassId><Name>测试班</Name><CreatedTime>2009/11/9 22:13:36</CreatedTime><Description>一些fasdf</Description><Status>1</Status><TeacherId>1</TeacherId></StudyClass>");
      

  9.   

     hr= pDoc->loadXML(bsClass);if(!SUCCEEDED(hr)) 
    hr返回-1 但是是成功了 所以SUCCEEDED(hr)会失败