利用那几个接口创建一个新的XML文件并且保存,我的信箱是[email protected]或者直接给一个URL也可以

解决方案 »

  1.   

    #include "stdafx.h"
    #import "msxml4.dll" named_guids
    using namespace MSXML2;
    inline void linefeed(MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode)
    {
    pRootNode->appendChild(pXMLDoc->createTextNode("\n"));
    }
    inline void addTextElement(MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode,LPCTSTR value)
    {
    pRootNode->appendChild(pXMLDoc->createTextNode(value));
    }
    void addfile(LPCTSTR filename,MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode)
    {
    MSXML2::IXMLDOMElementPtr pTempNode = NULL;
    pTempNode = pXMLDoc->createElement(_T("file"));
    //linefeed(pXMLDoc,pTempNode);
    addTextElement(pXMLDoc,pTempNode,filename);
    //linefeed(pXMLDoc,pTempNode);
    pRootNode->appendChild(pTempNode );
    linefeed(pXMLDoc,pRootNode);
    }
    void savedir(LPCTSTR filename,MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode)
    {
    if ((GetFileAttributes(filename) & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
    {
    MSXML2::IXMLDOMNodePtr pDirNode= NULL; 
    pDirNode = pRootNode->appendChild(pXMLDoc->createElement(_T("directory")));
    // Step 6.3b: Creating RecID attribute for the Record element
    MSXML2::IXMLDOMAttributePtr pRecIdAttr = NULL;
    pRecIdAttr = pXMLDoc->createAttribute(_T("pathname"));
    pRecIdAttr->nodeTypedValue = filename;
    pDirNode->attributes->setNamedItem(pRecIdAttr);
    linefeed(pXMLDoc,pDirNode); WIN32_FIND_DATA wfd= {0};
    char allname[MAX_PATH];
    strcpy(allname,filename);
    if(filename[strlen(filename)-1]!='\\')
    strcat(allname,"\\*.*");
    else
    strcat(allname,"*.*");
    HANDLE  hFind = FindFirstFile(allname, &wfd); if (hFind == INVALID_HANDLE_VALUE)
    return ;
    do
    {
    if(wfd.cFileName[0]=='.')
    continue;
    strcpy(allname,filename);
    strcat(allname,"\\");
    strcat(allname,wfd.cFileName);
    if((GetFileAttributes(allname) & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
    {
    savedir(allname,pXMLDoc,pDirNode);
    }
    else
    {
    addfile(wfd.cFileName,pXMLDoc,pDirNode);
    }
    }while(FindNextFile(hFind, &wfd));
    FindClose(hFind);
    }
    else
    {
    addfile(filename,pXMLDoc,pRootNode);
    }
    linefeed(pXMLDoc,pRootNode);}
    void test()
    {
    MSXML2::IXMLDOMDocument2Ptr pXMLDoc        = NULL;
    MSXML2::IXMLDOMParseError *pParsingErr = NULL;
    MSXML2::IXMLDOMElement *element     = NULL;
    MSXML2::IXMLDOMNodeList *childs      = NULL; 
    pXMLDoc.CreateInstance("Msxml2.DOMDocument.4.0");
    //Creating the Processing Instruction
    MSXML2::IXMLDOMProcessingInstructionPtr pPI = NULL;
    pPI = pXMLDoc->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
    _variant_t vNullVal;
    vNullVal.vt = VT_NULL;
    pXMLDoc->insertBefore(pPI, vNullVal);
    // Creating the Root Element
    MSXML2::IXMLDOMNodePtr pRootNode= NULL; 
    _variant_t varNodeType((short)MSXML2::NODE_ELEMENT);
    pRootNode= pXMLDoc->createNode(varNodeType, 
    _T("directorysave"), _T(""));
    pXMLDoc->appendChild(pRootNode);
    linefeed(pXMLDoc,pRootNode);
    savedir("c:\\demo1",pXMLDoc,pRootNode);
    pXMLDoc->save(_T("c:\\directory.xml"));
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    printf("save directory structure into an xml file, by Onega\n");
    CoInitialize(NULL);
    test();
    CoUninitialize();
    return 0;
    }
      

  2.   

    HRESULT hr;
    IXMLDOMDocument2 * pXMLDoc;
    IXMLDOMNode * pXDN;
    //...
    hr = CoInitialize(NULL); 
    if(FAILED(hr))
    return ;
    // Check the return value, hr...
    hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, 
    IID_IXMLDOMDocument2, (void**)&pXMLDoc);
    if(FAILED(hr))
    {
    MessageBox("CoCreateInstance Failure");
    return ;
    }

    hr = pXMLDoc->QueryInterface(IID_IXMLDOMNode, (void **)&pXDN);
    if(FAILED(hr))
    {
    MessageBox("QueryInterface XMLDOMNode Failure");
    return ;
    }// CString str1("xml"),str2("version=\"1.0\" encoding=\"UTF-8\"");
    CString str1("xml"),str2("version='1.0' encoding='UTF-8'");
    BSTR b1=str1.AllocSysString();
    BSTR b2=str2.AllocSysString();
    IXMLDOMProcessingInstruction* pXMLProInst=NULL; 
    hr=pXMLDoc->createProcessingInstruction(b1,b2,&pXMLProInst);
    SysFreeString(b1);
    SysFreeString(b2);
    if(FAILED(hr))
    {
    MessageBox("createProcessingInstruction Failure");
    if(NULL != pXMLProInst)
    pXMLProInst->Release();
    pXDN->Release();
    pXMLDoc->Release();
    return ;
    }
    str1="Node1";
    b1=str1.AllocSysString();
    hr=pXDN->put_text(b1);
    // SysFreeString(b1);
    if(FAILED(hr))
    {
    MessageBox("put node text Failure");
    pXMLProInst->Release();
    pXDN->Release();
    pXMLDoc->Release();
    return ;
    }
    hr=pXMLDoc->appendChild(pXDN,NULL);
    if(FAILED(hr))
    {
    MessageBox("appendChild Failure");
    pXMLProInst->Release();
    pXDN->Release();
    pXMLDoc->Release();
    return ;
    }
    VARIANT var;
    var.vt=VT_BSTR;
    var.bstrVal=A2BSTR("Test.xml");
    hr=pXMLDoc->save(var);
    if(FAILED(hr))
    {
    MessageBox("save Failure");
    DWORD d=GetLastError();
    pXMLProInst->Release();
    pXDN->Release();
    pXMLDoc->Release();
    return ;
    }
    pXMLProInst->Release();
    pXDN->Release();
    pXMLDoc->Release();现在的问题是可以生成XML文档但是用MyIE打开的时候提示XML文档格式不正确,为什么,如何改正
      

  3.   

    #import "msxml.dll" rename_namespace("XML")void ReadXML()
    {
    XML::IXMLDOMDocumentPtr xmlDoc(__uuidof(DOMDocument));
    xmlDoc->async = FALSE;//同步加载XML文件
    char szFilePath[]="hxk.xml";
    xmlDoc->load(szFilePath);
    XML::IXMLDOMElementPtr pDocElement = xmlDoc->GetdocumentElement();
    XML::IXMLDOMElementPtr pElement = pDocElement ->selectSingleNode("ShangHai");
    AfxMessageBox((_bstr_t)pElement->getAttribute("Weather"));
    AfxMessageBox(pElement->Gettext());
    //AfxMessageBox(xmlDoc->xml);
    }int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    CoInitialize(NULL);
    try
    {
    XML::IXMLDOMDocumentPtr xmlDoc(__uuidof(DOMDocument));
    XML::IXMLDOMElementPtr pDocElemt = xmlDoc->createElement("China");
    xmlDoc->appendChild(pDocElemt);
    XML::IXMLDOMElementPtr pNewDocElemt = xmlDoc ->createElement("Beijing");
    pNewDocElemt ->Puttext("-11");
    pDocElemt->appendChild(pNewDocElemt);
    pNewDocElemt = xmlDoc->createElement("ShangHai");
    pNewDocElemt ->Puttext("9");
    pNewDocElemt ->setAttribute("Weather",_variant_t("Cloudy"));
    pDocElemt ->appendChild(pNewDocElemt); //xmlDoc ->save(_variant_t("d:\\hxk.xml")); ReadXML(); }
    catch (_com_error& err)
    {
    CString strError = "加载XML文件失败";
    strError += err.Description();
    AfxMessageBox(strError);
    } CoUninitialize();
    return nRetCode;
    }参考参考
      

  4.   

    UP.
    可以参考我的xml解析器chamoro.cosoft.org.cn