VC操作XML

1  遍历结点

///遍历结点
void PublicParseXML::GetAllElement(CString strFileName)
{
    CoInitialize(NULL);
	CComPtr<IXMLDOMDocument> spXmldoc;
	HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");

	if(SUCCEEDED(hr))
	{
	   
		VARIANT_BOOL isSuccessFul;
		CComVariant varXmlFile("aa.xml");

		spXmldoc->put_async(VARIANT_FALSE);
		HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);

		if(isSuccessFul==VARIANT_TRUE)
		{
		    CString str;
			CString str2;	
			CComBSTR bstrXml;
			VARIANT value;
            long length=0;

			CComPtr<IXMLDOMElement>  spRoot=NULL;		
			CComPtr<IXMLDOMNodeList> spNodeList=NULL;
			CComPtr<IXMLDOMNode> spNode=NULL;
			CComPtr<IXMLDOMNode>  spListItem=NULL;

			hr = spXmldoc->get_documentElement(&spRoot);

			//获取结点名称
			spRoot->get_nodeName(&bstrXml);

		
			//获取孩子列表					
			spRoot->get_childNodes(&spNodeList);

			//获取孩子个数           
			spNodeList->get_length(&length);
			str.Format("孩子个数: %ld",length);
			AfxMessageBox(str);
         	
			for(int i=0;i<length;++i)
				{                
				
					spNodeList->get_item(i, &spNode);                  
                    
					
					//获取name属性值
					spNode->selectSingleNode(L"@name",&spListItem);							
					spListItem->get_nodeValue(&value);	

					str=CString(value);
                    str2="";
					str2.Append("name= ");
					str2.Append(str);                  
					AfxMessageBox(str2);

					spNode->get_text(&bstrXml);
					str=CString(bstrXml);
					AfxMessageBox(str);

					
				}		
		}
		varXmlFile.ClearToZero();
	}

	spXmldoc.Release();

	CoUninitialize();
}

2  增加结点

///增加结点
void PublicParseXML::AddElement(CString strFileName)
{

	CoInitialize(NULL);
	CComPtr<IXMLDOMDocument> spXmldoc;
	HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");

	if(SUCCEEDED(hr))
	{
	   
		VARIANT_BOOL isSuccessFul;
		CComVariant varXmlFile("aa.xml");

		spXmldoc->put_async(VARIANT_FALSE);
		HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);

		if(isSuccessFul==VARIANT_TRUE)
		{
		    CString str;
			CString str2;	
			CComBSTR bstrXml;
			VARIANT value;
            long length=0;

			CComPtr<IXMLDOMElement>  spRoot=NULL;		
			
			hr = spXmldoc->get_documentElement(&spRoot);


			CComPtr<IXMLDOMNode> spNewNode;
            
			spXmldoc->createNode(CComVariant(NODE_ELEMENT), OLESTR("childnode3"), OLESTR(""), &spNewNode); //创建新节点
            
			//spRoot->selectSingleNode(OLESTR("/root/node2"), &spNode);
            
			spRoot->appendChild(spNewNode, &spNewNode); //将新节点加为根结点的子节点
            
			spNewNode->put_text(OLESTR("childtext2")); //写入新节点text,没有则为空
            
			CComQIPtr<IXMLDOMElement> spEle = spNewNode; //注意这里使用CComQIPtr
            
			spEle->setAttribute(OLESTR("attrib1"), CComVariant(OLESTR("value1")));//给新节点添加属性
           
			spXmldoc->save(CComVariant(OLESTR("stocks.xml")));
		}
	}
}

3 修改结点

///修改结点
  void PublicParseXML::ModifyElement(CString strFileName)
  {
	  CoInitialize(NULL);
	CComPtr<IXMLDOMDocument> spXmldoc;
	HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");

	if(SUCCEEDED(hr))
	{
	   
		VARIANT_BOOL isSuccessFul;
		CComVariant varXmlFile("aa.xml");

		spXmldoc->put_async(VARIANT_FALSE);
		HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);

		if(isSuccessFul==VARIANT_TRUE)
		{
		    CString str;
			CString str2;	
			CComBSTR bstrXml;
			VARIANT value;
            long length=0;

			CComPtr<IXMLDOMElement>  spRoot=NULL;		
			
			hr = spXmldoc->get_documentElement(&spRoot);


			CComPtr<IXMLDOMNode> spNewNode;            
            
			spRoot->selectSingleNode(OLESTR("/layer/breaker1"), &spNewNode);
            
            //写入新节点text,没有则为空;写入值会把孩子结点删掉,不写则没问题
		  //	spNewNode->put_text(OLESTR("childtext2")); 
            
			CComQIPtr<IXMLDOMElement> spEle = spNewNode; //注意这里使用CComQIPtr
            
			spEle->setAttribute(OLESTR("attrib1"), CComVariant(OLESTR("value1")));//给节点添加新属性
           	spEle->setAttribute(OLESTR("name"), CComVariant(OLESTR("value1")));//修改节点属性

			spXmldoc->save(CComVariant(OLESTR("stocks.xml")));
		}
	}

  }

猜你喜欢

转载自blog.csdn.net/sichuanpb/article/details/82855136