我刚接触XML,对XML不熟悉,现在没有时间学习。
能否给出代码实现如下功能:
1.创建一个XML文件
2.随便将一个字符串写进去
3.将上一部中的字符串读出来。如能提供VC读写XML的资料更好。

解决方案 »

  1.   

    先贴一段写的代码:
    #import "msxml3.dll" named_guids
    using namespace MSXML2; CoInitialize(NULL);
    ...
    //一段写的代码
    // 创建文档
    MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL;
    pXMLDoc.CreateInstance("Msxml2.DOMDocument.3.0");
    // Create the Processing Instruction
    MSXML2::IXMLDOMProcessingInstructionPtr pXMLProc = NULL;
    pXMLProc = pXMLDoc->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
    // Insert the Processing Instruction
    _variant_t vNullVal;
    vNullVal.vt = VT_NULL;
    pXMLDoc->insertBefore(pXMLProc, vNullVal);
    // 创建根结点
    _variant_t varNodeType((short)MSXML2::NODE_ELEMENT);
    MSXML2::IXMLDOMNodePtr pXMLNodeRoot= NULL; 
    pXMLNodeRoot = pXMLDoc->createNode(varNodeType, _T("Root"), _T(""));
    // 添加根结点
    pXMLDoc->appendChild(pXMLNodeRoot);
    // 创建并添加下级结点
    MSXML2::IXMLDOMNodePtr pXMLNodeNode= NULL; 
    pXMLNodeNode = pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Node1")));
    pXMLNodeNode = pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Node2")));
    // 创建并设置下级结点属性(3个:姓名、性别、年龄)
    MSXML2::IXMLDOMAttributePtr pXMLAttr = NULL;
    pXMLAttr = pXMLDoc->createAttribute(_T("name"));
    pXMLAttr->nodeTypedValue = "王进";
    pXMLNodeNode->attributes->setNamedItem(pXMLAttr);
    pXMLAttr = pXMLDoc->createAttribute(_T("sex"));
    pXMLAttr->nodeTypedValue = "男";
    pXMLNodeNode->attributes->setNamedItem(pXMLAttr);
    pXMLAttr = pXMLDoc->createAttribute(_T("age"));
    pXMLAttr->nodeTypedValue = "80";
    pXMLNodeNode->attributes->setNamedItem(pXMLAttr);
    // 创建下级元素结点
    MSXML2::IXMLDOMElementPtr pXMLEle = NULL;
    pXMLEle = pXMLDoc->createElement(_T("file"));
    pXMLEle->appendChild(pXMLDoc->createTextNode("Element"));
    // 添加元素结点
    pXMLNodeNode->appendChild( pXMLEle );
    /*
    // 创建下级元素结点
    MSXML2::IXMLDOMElementPtr pXMLEleSub = NULL;
    pXMLEleSub = pXMLDoc->createElement(_T("file"));
    pXMLEleSub->appendChild(pXMLDoc->createTextNode("SubElement"));
    // 添加下级元素结点
    pXMLEle->appendChild( pXMLEleSub );
    */
    // 保存文档
    pXMLDoc->save(_T("c:\\Test.xml")); ...
    CoUninitialize();
      

  2.   

    曾经看过这个:http://xml007.myetang.com/
      

  3.   


    #include "stdafx.h" 
    #include "iostream.h" 
    #include "msxml.h" 
    #include "atlbase.h" 
    #import "msxml.dll" //引入类型库 
    #include "windows.h"
    #include "stdio.h"
    #include "string.h"
    //#include "afx.h"
    #include <iostream.h>
    #include "cstringt.h"
    //#include "file.h"
    #include "atlstr.h"
    #ifdef _DEBUG 
    #define new DEBUG_NEW 
    #undef THIS_FILE 
    static char THIS_FILE[] = __FILE__; 
    #endif int Exit(); 
    void LoadFromString(); 
    void CreateXML(); 
    //XML文本模板 
    //_bstr_t XMLTemple="<China><Beijing> -12 </Beijing><Shanghai Weather='Cloudy'> 9 </Shanghai><Beijing>-20</Beijing></China>"; 
    CString XMLTemple="<Connection Action='UploadASMResult'><VehicleInfo License='sd3' LicenseClass='34s' VLTID='21' Mileage='1' RegDate='2000-12-11 12:11:14' OwnerName='12' OwnerAddr='12' BodyColor='343' EngineID='3445' VIN='5434' Cleaners='34'></VehicleInfo><ASMResult TestID='213d' License ='ads2' LicenseClass='231a' StationID ='2da' EISID='2ea' OperatorID='2ea' AmbientTemp='2.5' AmbientHum='2.5' Pressure='1' TestStartTime='2002-12-11 11:12:11' TestEndTime='2004-10-11 11:12:11' AmbientHC='2.2' AmbientCO ='2.2' AmbientNO='2.2' ResidualHC ='2.2' Is5024Done='1' 5024HC = '2.2' 5024CO='2.2' 5024NO = '2.2' 5024Rotary='2.2' 5024Result='2.2' Is2540Done='0' 2540HC='2.2' 2540CO='2.2' 2540NO='2.2' 2540Rotary='2.2' 2540Result='2.2' Result='2' IsGasCapTested='1' GasCapResult='12' OutlookResult='54' AbortReason='66456'></ASMResult></Connection>";
    int main() 

    cout << " XML编程--示范程序 " << endl; 

    CoInitialize(NULL); //初始化COM 环境 

    cout << "------生成新的XML文本 ------" << endl; 

    CreateXML(); 

    cout << "------读取已有XML文本 ------" << endl; 

    LoadFromString(); 
    return Exit(); 


    void CreateXML() 

    MSXML::IXMLDOMDocumentPtr pDoc; 
    HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML::DOMDocument)); 
    if(!SUCCEEDED(hr)) 
    {  cout << "无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!" << endl; 
    Exit(); 



    MSXML::IXMLDOMElementPtr pDocElement=pDoc->createElement("China"); 

    pDoc->appendChild(pDocElement); 

    cout << "生成树根:\n" << pDoc->xml << endl; 

    MSXML::IXMLDOMElementPtr pNewChildElement,pNewChildElement1; 

    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);  pNewChildElement=pDoc->createElement("DEFINE"); 

    pNewChildElement1=pDoc->createElement("ID"); pNewChildElement->appendChild(pNewChildElement1);

    pDocElement->appendChild(pNewChildElement); 
    cout << "再添加节点:\n" << pDoc->xml << endl;  char buf[1024];
    memset(buf,0,1024);
    strcat(buf,pDoc->xml);
    //sprintf(buf,"%s",pDoc->xml);
    FILE *p;
    p=fopen("xxx.xml","w");
    fwrite(buf,1,strlen(pDoc->xml),p);
    fclose(p); pDocElement->removeChild (pNewChildElement); 

    cout << "把刚加入的节点删除:\n" << pDoc->xml << endl; 

    } void LoadFromString() 


    MSXML::IXMLDOMDocumentPtr pDoc; 

    HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML::DOMDocument)); 

    if(!SUCCEEDED(hr)) 


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


    _bstr_t name;
    pDoc->loadXML((_bstr_t)XMLTemple); 
    cout << "读取结果:\n" << pDoc->xml << endl; 

    MSXML::IXMLDOMElementPtr pDocElement=pDoc->GetdocumentElement(); 
    _variant_t var; MSXML::IXMLDOMElementPtr pElement=pDocElement->selectSingleNode("Connection"); 
    var=pElement->getAttribute("Action");
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.bstrVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    cout<<var.cVal<<endl;
    //pDocElement->removeChild(pElement);  MSXML::IXMLDOMNodeListPtr pLists = pDocElement->selectNodes("ASMResult");

    long n = pLists->Getlength();
    for (int i = 0; i < n; i++)
    {
    MSXML::IXMLDOMElementPtr pDocElement = pLists->Getitem(i);
    cout << pDocElement->Gettext() << endl;
    }

    cout << "定位删除Shanghai节点:\n" << pDoc->xml << endl; 

    cout << "保存结果 Save .....(模拟而已)" << endl; 

    cout << "\n 好了,就这么简单" << endl; 
    } int Exit() 
    {  getchar();
    return 1; }