以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML源码及示例(仅原创和转载) 』  (http://bbs.xml.org.cn/list.asp?boardid=32)
----  VC++.net操作XML  (http://bbs.xml.org.cn/dispbbs.asp?boardid=32&rootid=&id=20693)


--  作者:chenxinmx
--  发布时间:7/26/2005 3:03:00 PM

--  VC++.net操作XML
经过一个多星期的XML学习,我终于完成了这个实例。
在VS。NET中,遍历XML,对XML进行添加、删除、修改、保存等操作,
这些已基本完成,只是对XML操作的部分,我没有封装成类,这是我最近一两天必须要完成的东西!
在这里,我会把这个这例放上来,可我不知道如何放,看来只能把部分源码往上复制了
呵呵,如果哪位可以告诉我如何把整个程序放上来,就好 了,不用我来来回回的复制粘贴了!
在这里先谢谢论坛给我 的帮助啦,呵呵
--  作者:chenxinmx
--  发布时间:7/26/2005 3:08:00 PM

--  
晕死贴图也不可以呀 ,真是郁闷!
这是第一个函数,加载遍历XML 
void CExpDlg::OnBnClickedLoad()
{
 // TODO: 在此添加控件通知处理程序代码
 m_List.ResetContent();
 IXMLDOMNodeList* pNodeList;
 IXMLDOMNode* pNode;
 CString strFindText(_T("Name"));
 long value;
 if(SUCCEEDED(CoInitialize(NULL)))//启动COM接口
 {//初始化IXMLDOMDocument指针
  if(SUCCEEDED(CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument,(void**)&m_pDoc)))
  {
   CString strParth=".\\fraction.xml";
   CComVariant vParth(strParth);
   VARIANT_BOOL isSuccessful;
   m_pDoc->load(vParth,&isSuccessful);//加载XML文档
   if(isSuccessful==VARIANT_TRUE)
   {
    //AddRootToTree();
    //MessageBox("Load success!");
    m_bLoadFlag=TRUE;
   }
  }
 }
 //得到Name节点列表
 hr=m_pDoc->getElementsByTagName(strFindText.AllocSysString(),&pNodeList);
 SUCCEEDED(hr)?0:throw hr;
 hr=pNodeList->get_length(&value);//得到节点长度
 if(SUCCEEDED(hr))
 {
  for(long i=0;i<value;i++)
  {
   pNodeList->get_item(i,&pNode);//得到节点指针
   if(pNode)
   {
    BSTR bsxml;
    pNode->get_text(&bsxml);
    CString strxml=CString(bsxml);
    m_List.InsertString(-1,strxml);//.IntString(strxml);//将结果加入到列表中
    pNode->Release();
   }
  }
 }
 //设置列表框默认选项
 m_List.SetCurSel(0);
 OnLbnDblclkList2();
 pNodeList->Release();
}
--  作者:chenxinmx
--  发布时间:7/26/2005 3:09:00 PM

--  
保存的函数:
void CExpDlg::OnBnClickedSave()
{
 // TODO: 在此添加控件通知处理程序代码
 if(!m_bLoadFlag)
 {
  MessageBox("请先加载XML文档!");
  return;
 }
 CString strPath=".\\fraction.xml";
 CComVariant ComPath(strPath);
 m_pDoc->save(ComPath);
}
--  作者:chenxinmx
--  发布时间:7/26/2005 3:11:00 PM

--  
删除的处理:
void CExpDlg::OnBnClickedDel()
{
 //获取要删除节点的名字
 int nIndex=m_List.GetCurSel();
 if(nIndex<0)
  nIndex=0;
 CString strDelName;
 m_List.GetText(nIndex,strDelName);
 //取得待删除节点的父节点指针
 long value;
 BSTR bsName;
 IXMLDOMNodeList* pNodeList;
 IXMLDOMNode* pNode;
 IXMLDOMNode* pDelParentNode;
 CString strFindText(_T("Name"));
 hr=m_pDoc->getElementsByTagName(strFindText.AllocSysString(),&pNodeList);
 SUCCEEDED(hr)?0:throw hr;
 hr=pNodeList->get_length(&value);
 SUCCEEDED(hr)?0:throw hr;
 for(long i=0;i<value;i++)
 {
  pNodeList->get_item(i,&pNode);
  if(pNode)
   pNode->get_text(&bsName);
  if(CString(bsName)==strDelName)
  {
   pNode->get_parentNode(&pDelParentNode);
   break;
  }
 }
 IXMLDOMNode* pDelNode=NULL;
 IXMLDOMNode* pOutNode;
 //取得待删除节点的父节点指针
 pDelParentNode->get_parentNode(&pDelNode);
 hr=pDelNode->removeChild(pDelParentNode,&pOutNode);
 SUCCEEDED(hr)?0:throw hr;
 //对列表框进行处理
 m_List.DeleteString(nIndex);
 m_Num=m_Name=m_Sex=m_Grade=m_English=m_Math=m_Chinese="";

 //释放指针
 pNode->Release();
 pDelNode->Release();
 pOutNode->Release();
 pDelParentNode->Release();
 pNodeList->Release();
 UpdateData(FALSE);
}

不好意思哦,我现在有事,必须走开了,明天再发吧,最好是我明天可以将操作封装成类,给大家重用,好了今天就到这里吧


--  作者:b1ueray
--  发布时间:7/26/2005 11:57:00 PM

--  
学习ing,呵呵
--  作者:leeryan
--  发布时间:11/1/2005 11:14:00 AM

--  
能不能把整个代码传上来,小弟这里多谢了。
--  作者:alixon
--  发布时间:12/10/2005 11:20:00 PM

--  
这样的代码也敢往上抡
--  作者:WayneLuo
--  发布时间:3/23/2010 10:04:00 PM

--  
代码在哪呢啊
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms