以文本方式查看主题 - 中文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=""; //释放指针 不好意思哦,我现在有事,必须走开了,明天再发吧,最好是我明天可以将操作封装成类,给大家重用,好了今天就到这里吧 |
-- 作者: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 |