攻城狮

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
    <span style="color:#ff0000;">void COperateXMLDlg::OnBnClickedGen()  
    {  
        //::CoInitialize(NULL); //初始化COM  
        // TODO: 在此添加控件通知处理程序代码  
        UpdateData(TRUE);  
        MSXML2::IXMLDOMDocumentPtr pDoc;   
        MSXML2::IXMLDOMElementPtr  xmlRoot ;   
        //创建DOMDocument对象  
        HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));   
        if(!SUCCEEDED(hr))   
        {    
         MessageBox(_T("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"));   
         return ;  
        }   
        //根节点的名称为Book  
        //创建元素并添加到文档中  
        xmlRoot=pDoc->createElement((_bstr_t)"Book");  
        //设置属性  
        xmlRoot->setAttribute("id",(const _variant_t)m_strId);  
        pDoc->appendChild(xmlRoot);  
        MSXML2::IXMLDOMElementPtr pNode;  
        //添加“author”元素  
        pNode=pDoc->createElement((_bstr_t)"Author");  
        pNode->Puttext((_bstr_t)m_strAuthor);  
        xmlRoot->appendChild(pNode);  
        //添加“Title”元素  
        pNode=pDoc->createElement((_bstr_t)"Title");  
        pNode->Puttext((_bstr_t)m_strTitle);  
        xmlRoot->appendChild(pNode);  
        //保存到文件   
        //如果不存在就建立,存在就覆盖   
        pDoc->save(_T("d://he.xml"));   
        //::CoUninitialize();  
    }  
      
      
    void COperateXMLDlg::OnBnClickedGet()  
    {  
        // TODO: 在此添加控件通知处理程序代码  
        MSXML2::IXMLDOMDocumentPtr pDoc;  
        HRESULT hr;  
        hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));  
        if(FAILED(hr))  
        {    
         MessageBox(_T("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"));   
         return ;  
        }   
        //加载文件   
        pDoc->load("d://he.xml");   
        /* 方法一 
        MSXML2::IXMLDOMNodePtr  pNode; 
        //在树中查找名为Book的节点,"//"表示在任意一层查找  
        pNode=pDoc->selectSingleNode("//Book"); 
        MSXML2::DOMNodeType nodeType;  
        //得到节点类型  
        pNode->get_nodeType(&nodeType);  
        //节点名称  
        CString strName; 
        strName=(char  *)pNode->GetnodeName(); 
        //节点属性,放在链表中  
        MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap=NULL; 
        MSXML2::IXMLDOMNodePtr   pAttrItem; 
        _variant_t variantvalue; 
        pNode->get_attributes(&pAttrMap); 
        long count; 
        count=pAttrMap->get_length(&count); 
        pAttrMap->get_item(count,& pAttrItem); 
        //pAttrMap->get_item(0,& pAttrItem);  //同上,验证count值 
        //取得节点的值 
        pAttrItem->get_nodeTypedValue(&variantvalue); 
        m_strId=(char *)(_bstr_t)variantvalue; 
        /* 测试 
        CString s; 
        s.Format(_T("%d"),count); 
        m_strAuthor=(char *)(_bstr_t)s; 
        */  
        //方法二  
        //MSXML2::IXMLDOMElementPtr pRootNode = pDoc->documentElement;  
        //查找Book节点  
        MSXML2::IXMLDOMNodePtr pBookNode = pDoc->selectSingleNode(_T("Book"));  
      
        //CString s;  
        //long size = pBookNode->length;  
        MSXML2::IXMLDOMNodePtr pAuthorNode = pBookNode->selectSingleNode(_T("Author"));  
        MSXML2::IXMLDOMNodePtr pTitleNode = pBookNode->selectSingleNode(_T("Title"));  
        //s.Format(_T("%sauthor: %s\ttitle: %s\r\n"),s,(LPCTSTR)pAuthorNode->text,(LPCTSTR)pTitleNode->text);  
        MSXML2::DOMNodeType nodeType;   
        //得到节点类型   
        pBookNode->get_nodeType(&nodeType);  
        MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap=NULL;  
        MSXML2::IXMLDOMNodePtr   pAttrItem;  
        pBookNode->get_attributes(&pAttrMap);  //获取节点所有属性  
        long count;  
        count=pAttrMap->get_length(&count);  
        pAttrMap->get_item(count,& pAttrItem); //获得第count个item值  
      
        _variant_t variantvalue;  
        pAttrItem->get_nodeTypedValue(&variantvalue);  
        //m_strId = (char *)(_bstr_t)variantvalue;  
        //获取book的id属性的方法三  
        //MSXML2::IXMLDOMElementPtr pRootNode = pDoc->documentElement;//此方法获得XML跟节点  
        //variantvalue = pRootNode->getAttribute(_bstr_t("id"));  
        MSXML2::IXMLDOMElementPtr pBNode = pBookNode;                //获取选中节点的元素节点地址  
        variantvalue = pBNode->getAttribute(_bstr_t("id"));  
        m_strId = (char *)(_bstr_t)variantvalue;  
        m_strAuthor = (LPCTSTR)pAuthorNode->text;  
        m_strTitle = (LPCTSTR)pTitleNode->text;  
          
        UpdateData(FALSE);  
    }  
      
      
      
    void COperateXMLDlg::OnBnClickedClr()  
    {  
        // TODO: 在此添加控件通知处理程序代码  
        //UpdateData(TRUE);  
      
        m_strId = (LPCTSTR)("");  
        m_strAuthor = (LPCTSTR)("");  
        m_strTitle = (LPCTSTR)("");  
      
        UpdateData(FALSE);  
    }</span>  

以上三个按钮分别表示将数据写入XML文件,读取XML文件需要的节点属性值,以及清空文本框。

 

posted on 2018-01-25 09:57  萌宝芒果  阅读(99)  评论(0编辑  收藏  举报