VC++对XML文件操作(一)

2014-11-23 17:31:10 · 作者: · 浏览: 62
\ 
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; //获取选中节点的元素节点地址 va