关闭

Microsoft Dom xml写入与读取操作笔记

324人阅读 评论(0) 收藏 举报

Microsoft Dom xml写入与读取操作笔记

分类: VC++ 40人阅读 评论(0) 收藏 举报

写xml函数。文件内部路径:all->parent->child,child属性:AA,BB,CC

  1. void writexml()  
  2. {  
  3.     MSXML2::IXMLDOMDocumentPtr pDoc = NULL;  
  4.     MSXML2::IXMLDOMElementPtr  pNode = NULL;  
  5.     MSXML2::IXMLDOMElementPtr  pNode2 = NULL;  
  6.     MSXML2::IXMLDOMElementPtr  xmlRoot = NULL;  
  7.     MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap = NULL;  
  8.     MSXML2::IXMLDOMNodePtr   pAttrItem = NULL;  
  9.     _variant_t variantvalue;  
  10.     HRESULT hr;  
  11.   
  12.     hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));  
  13.     // 是否安装了MS XML Parser 运行库  
  14.     if (FAILED(hr))     return ;      
  15.   
  16.     char* AA = "aa";  
  17.     char* BB = "bb";  
  18.     char* CC = "cc";  
  19.   
  20.     char* szXmlPath = "D:\\test.xml";  
  21.     pDoc->load(szXmlPath);  
  22.     xmlRoot = pDoc->selectSingleNode("all");  
  23.     if(xmlRoot == NULL)  
  24.     {  
  25.         xmlRoot = pDoc->createElement(_bstr_t::_bstr_t("all"));  
  26.         if(xmlRoot == NULL)     return ;  
  27.         pDoc->appendChild(xmlRoot);  
  28.     }  
  29.   
  30.     pNode = xmlRoot->selectSingleNode("parent");  
  31.     if(pNode == NULL)  
  32.     {  
  33.         pNode = pDoc->createElement(_bstr_t::_bstr_t("parent"));  
  34.         if(pNode == NULL)       return ;  
  35.         xmlRoot->appendChild(pNode);  
  36.     }  
  37.   
  38.     pNode2 = pNode->selectSingleNode("child");  
  39.     if(pNode2 == NULL)  
  40.     {  
  41.         pNode2 = pDoc -> createElement(_bstr_t::_bstr_t("child"));  
  42.         if(pNode2 == NULL)      return ;  
  43.         pNode->appendChild(pNode2);  
  44.     }  
  45.   
  46.     pNode2->setAttribute( _bstr_t::_bstr_t("AA"), AA);  
  47.     pNode2->setAttribute( _bstr_t::_bstr_t("BB"), BB);  
  48.     pNode2->setAttribute( _bstr_t::_bstr_t("CC"), CC);  
  49.   
  50.     pDoc->save(szXmlPath);  
  51. }  


读xml函数。函数执行后szValue将存放要读取的属性的值。

  1. // 索引查找节点属性的值  
  2. // szFilePath 为文件路径, szXmlPath 为节点路径  
  3. // szAtrribute 为索引的属性,szValue 为索引属性的值(传出参数)  
  4. bool CXmlOperate::GetXmlValue(char* szFilePath, char* szXmlPath, char* szAttribute, char* szValue)  
  5. {  
  6.     if(szValue == NULL)     return false;   // 传入缓冲区为空  
  7.     if(szFilePath == NULL)      return false;   // 传入文件路径为空  
  8.     if(szXmlPath == NULL)       return false;   // 传入属性路径为空  
  9.     if(szAttribute == NULL)     return false;   // 传入属性为空  
  10.     MSXML2::IXMLDOMDocumentPtr pDoc;  
  11.     MSXML2::IXMLDOMNodePtr  pNode;  
  12.     MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap = NULL;  
  13.     MSXML2::IXMLDOMNodePtr   pAttrItem = NULL;  
  14.     HRESULT hr;  
  15.     hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));  
  16.     // 是否安装了MS XML Parser 运行库  
  17.     if (FAILED(hr))     return  false;    
  18.   
  19.     pDoc->load(szFilePath);  
  20.     pNode = pDoc->selectSingleNode(szXmlPath);  
  21.     if(pNode == NULL)   return false;  
  22.   
  23.     _variant_t variantvalue;  
  24.     pNode->get_attributes(&pAttrMap);  
  25.     if(pAttrMap == NULL)    return false;  
  26.     pAttrItem = pAttrMap->getNamedItem(szAttribute);  
  27.     if(pAttrItem == NULL)   return false;  
  28.     pAttrItem->get_nodeTypedValue(&variantvalue);  
  29.     strcpy(szValue, (char*)(_bstr_t)variantvalue);  
  30.   
  31.     return true;  
  32. }  



版权声明:本文为博主原创文章,未经博主允许不得转载。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:643304次
    • 积分:9915
    • 等级:
    • 排名:第1980名
    • 原创:268篇
    • 转载:362篇
    • 译文:5篇
    • 评论:40条
    文章分类
    最新评论