本帖最后由 lustersir 于 2010-04-19 15:16:19 编辑

解决方案 »

  1.   

    VC的XML操作是通过COM接口实现的!
      

  2.   

    UpdateData();
    MSXML2::IXMLDOMDocumentPtr pDoc;
    MSXML2::IXMLDOMElementPtr xmlRoot;
    // 创建DOMDocument对象 
    HRESULT hr  =  pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
    if(!SUCCEEDED(hr))
    {
    MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库! ");
    return;
    }   // 根节点的名称为Book 
    // 创建元素并添加到文档中
    xmlRoot = pDoc->createElement((_bstr_t)"Book");
    //设置属性
    xmlRoot->setAttribute("id" ,(const char *)m_strId);
    pDoc->appendChild(xmlRoot);
    MSXML2::IXMLDOMElementPtr pNode;
    //添加“author”元素
    pNode = pDoc->createElement((_bstr_t)"Author");
    pNode->setAttribute("id","001");
    //pNode->Puttext((_bstr_t)(const char *)m_strAuthor);
    xmlRoot->appendChild(pNode);
    MSXML2::IXMLDOMNodePtr pChildNode;
    //pNode->setAttribute("id","001");
    pChildNode=pDoc->createElement((_bstr_t)"Sex");
    pChildNode->text="man";
    pNode->appendChild(pChildNode);
    // 添加“Title”元素
    pNode = pDoc -> createElement("Author");
    // pNode->Puttext((const char *)m_strTitle);
    xmlRoot->appendChild(pNode);
    pChildNode=pDoc->createElement((_bstr_t)"Language");
    pChildNode->text="China";
    pNode->appendChild(pChildNode);
    // 保存到文件
    // 如果不存在就建立,存在就覆盖
    pDoc->save("d:\\he.xml"); 
    要初始化COM
      

  3.   

    谢谢大家指点,最后还是用了微软的 MSXML Parser谢谢 etz2008 给我的代码,虽然我刚才已经找到了差不多的一个例子弄明白了,但你给我的例子比我找的更丰富一点,我找的那个太苍白啦,但还是要把我调通的小例子一起贴上来,以供其他人参考。#include "stdafx.h" 
    #include "iostream.h" 
    #include "atlbase.h" 
    #import "msxml6.dll" //引入类型库 using namespace MSXML2;
    //using namespace std;void LoadFromString(); 
    void CreateXML(); //XML文本模板 
    _bstr_t XMLTemple="<China><Beijing>-11</Beijing><Shanghai Weather=\"Cloudy\">9</Shanghai></China>"; 
    int main() 

    CoInitialize(NULL); //初始化COM 环境  CreateXML(); 
    LoadFromString();  CoUninitialize();
    system("PAUSE");
    return 0; 
    } void CreateXML()

    cout << "------生成新的XML文本 ------" << endl;  //MSXML2::
    IXMLDOMDocumentPtr pDoc; 

    HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument)); 
    /*格式:__uuidof(表达式)
    __uuidof关键字用来获得表达式的GUID。这个表达式可以是一种类型名称、一个指针、引用或者一个类型的数组、一个有这个类型实例化的模板或者这种类型的变量。只要编译器能使用该参数获得相关的GUID,那么该参数就是有效的。
    这个参数的特殊情况就是它取0或NULL的时候。在这种情况下,__uuidof会返回一个由0组成的GUID。
    可以使用这一关键字来提取一个对象uuid扩展属性的GUID。*/ if(!SUCCEEDED(hr)) 

    cout << "无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!" << endl; 
    system("PAUSE");


    //MSXML2::
    IXMLDOMElementPtr pDocElement=pDoc->createElement("China"); 
    pDoc->appendChild(pDocElement); 
    cout << "生成树根:\n" << pDoc->xml << endl; 

    //MSXML2::
    IXMLDOMElementPtr pNewChildElement; 
    pNewChildElement=pDoc->createElement("Beijing"); 
    pNewChildElement->Puttext("-11"); 
    pDocElement->appendChild(pNewChildElement); 
    cout << "添加节点:\n" << pDoc->xml << endl; 
    pNewChildElement=pDoc->createElement("Shanghai"); 
    pNewChildElement->Puttext("9"); 
    pNewChildElement->setAttribute("Weather",_variant_t("Cloudy")); 
    pDocElement->appendChild(pNewChildElement); 
    cout << "再添加节点:\n" << pDoc->xml << endl;  pDoc->save("c:\\Test.xml"); pDocElement->removeChild (pNewChildElement); 
    cout << "把刚加入的节点删除:\n" << pDoc->xml << endl; 
    } void LoadFromString() 

    cout << "------读取已有XML文本 ------" << endl; 
    //MSXML2::
    IXMLDOMDocumentPtr pDoc; 
    HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument)); 
    if(!SUCCEEDED(hr)) 

    cout << "无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!" << endl; 
    system("PAUSE");
    }  pDoc->loadXML(XMLTemple); 
    cout << "读取结果:\n" << pDoc->xml << endl; 
    //MSXML2::
    IXMLDOMElementPtr pDocElement=pDoc->GetdocumentElement(); 
    //MSXML2::
    IXMLDOMElementPtr pElement=pDocElement->selectSingleNode("Shanghai"); 
    pDocElement->removeChild(pElement); 
    cout << "定位删除Shanghai节点:\n" << pDoc->xml << endl; 
    cout << "保存结果 Save .....(模拟而已)" << endl; 
    cout << "\n 好了,就这么简单" << endl;