谁知道C++访问XML的书啊?告知一二。想学XML可就找不到书。有知道的告知书名也行。
或学习C++访问XML的途径也可。谢了。

解决方案 »

  1.   

    tinyxml
      

  2.   

    你指的是解析XML文件吗?DOM MSXML, CMarkup
      

  3.   

    读写XML不用去专门看书吧,百度试着搜下:pugixml教程
      

  4.   

    repidxml 这还需要书啊,随便一搜就来了
      

  5.   

    以前自己写的读写XML配置档的:
    CString ::ReadSingleNodeXml(CString sec,CString key)
    {
    CoInitialize(NULL); 
    BSTR strv=L"";
    CString strdir=_T("");
    CString selnodecstr=_T("");
    CComPtr<IXMLDOMDocument> spXmldoc;      
    HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");        
    if(SUCCEEDED(hr))      
    {          
    VARIANT_BOOL isSuccessFul; GetAppPath(strdir);
    strdir=strdir+_T("\\Program\\aConfig.xml");
    CComVariant varXmlFile(strdir);   spXmldoc->put_async(VARIANT_FALSE);          
    HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);            
    if(isSuccessFul==VARIANT_TRUE)          
    {              
    CComBSTR bstrXml;              
    CComPtr<IXMLDOMElement> spRoot=NULL;                                                       
    hr = spXmldoc->get_documentElement(&spRoot);              
    spRoot->get_xml(&bstrXml);                
    CComPtr<IXMLDOMNode> spTheNode=NULL;   
    selnodecstr=_T("/aConfig/")+sec+_T("/")+key; spRoot->selectSingleNode(::SysAllocString(selnodecstr), &spTheNode); 
    if (spTheNode!=NULL)//节点未找到
    {
    spTheNode->get_text(&strv);
    }
    spRoot.Release();              
    bstrXml.Empty(); 

    varXmlFile.ClearToZero();      
    }        
    spXmldoc.Release();        
    CoUninitialize();  
    return (CString)strv;
    }
    int ::WriteSingleNodeXml(CString sec,CString key,CString val)
    {
    CoInitialize(NULL); 
    int result=1;
    CString strdir=_T("");
    CString selnodecstr=_T("");
    CComPtr<IXMLDOMDocument> spXmldoc;      
    HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");        
    if(SUCCEEDED(hr))      
    {          
    VARIANT_BOOL isSuccessFul;   GetAppPath(strdir);
    strdir=strdir+_T("\\Program\\aConfig.xml");
    CComVariant varXmlFile(strdir);  spXmldoc->put_async(VARIANT_FALSE);          
    HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);            
    if(isSuccessFul==VARIANT_TRUE)          
    {              
    CComBSTR bstrXml;              
    CComPtr<IXMLDOMElement> spRoot=NULL;                            
    CComPtr<IXMLDOMElement> spTheElem=NULL;              
    CComPtr<IXMLDOMNode> spNewNode=NULL;  
    CComPtr<IXMLDOMNode> spTheNode=NULL; 
    hr = spXmldoc->get_documentElement(&spRoot);              
    spRoot->get_xml(&bstrXml);                
    selnodecstr=_T("/aConfig/")+sec+_T("/")+key; spRoot->selectSingleNode(::SysAllocString(selnodecstr), &spTheNode); 
    if (spTheNode!=NULL)//节点未找到
    {
    spTheNode->put_text(::SysAllocString(val));
    spXmldoc->save(varXmlFile); //保存xml。
    result=0;
    }
    else
    {
    spXmldoc->createElement(::SysAllocString(key),&spTheElem);
    spTheElem->put_text(::SysAllocString(val)); spRoot->selectSingleNode(::SysAllocString(_T("/SaejongConfig/")+sec),&spTheNode);
    spTheNode->appendChild(spTheElem,&spNewNode); spXmldoc->save(varXmlFile); //保存xml。
    result=0;
    } spRoot.Release();              
    bstrXml.Empty(); 
    }  
    varXmlFile.ClearToZero(); 
    }       
    spXmldoc.Release();        
    CoUninitialize();  return result;
    }