MSXML使用

main.h

#include <stdio.h>
#include <windows.h>
#include <tchar.h>
#include <iostream>
#include <atlbase.h>
#include <atlcom.h>
#include <atlcomcli.h> 
#import "msxml4.dll"
using namespace std;
using namespace MSXML2;

//MSDN
//ms-help://MS.MSDNQTR.v90.chs/wmsrvsdk/htm/xmldominterfaces.htm

//创建文件
void test1(void);  //1.xml
void test2(void);  //2.xml
void test3(void);  //3.xml
void test4(void);  //4.xml
void test5(void);  //5.xml


//读文件
void test6(void);  //1.xml
void test7(void);  //2.xml
void test8(void);  //3.xml
void test9(void);  //4.xml
void test10(void); //5.xml


void test12(void);  //6.xml 获取注释
void test100(void);	//测试用


 

 

 

main.cpp

#include "main.h"

int main (void)
{
    test10();
	getchar();
	return 0;
}

void test1( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("1.xml")}; 
	MSXML2::IXMLDOMDocumentPtr	pDoc;
	MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}
	    //声明
		pProInstruction=pDoc->appendChild(pDoc->createProcessingInstruction(TEXT("xml"), TEXT("version='1.0' encoding='gb2312'")));
		pDoc->appendChild(pProInstruction);

		//root
		MSXML2::IXMLDOMElementPtr   pRoot;
		pRoot = pDoc->createElement(TEXT("root"));
		pDoc->appendChild(pRoot);

		//centos
		MSXML2::IXMLDOMNodePtr pNode = NULL;
		pNode = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("centos"),TEXT("1"));
		pNode->Puttext(TEXT("my name is centos mini 6.5"));
		pRoot->appendChild(pNode); 

		//linux
		MSXML2::IXMLDOMNodePtr linux = NULL;
		linux = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("linux"),TEXT("2"));
		linux->Puttext(TEXT("my name is Readhat"));
		pRoot->appendChild(linux); 

		//windows
		MSXML2::IXMLDOMNodePtr windows = NULL;
		windows = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("windows"),TEXT("3"));
		windows->Puttext(TEXT("my name is windows 7"));
		pRoot->appendChild(windows); 

		pDoc->save(szXmlName);

		/*
		//输出结果
		<?xml version="1.0" encoding="GB2312"?>
		<root>
		   <centos xmlns="1">my name is centos mini 6.5</centos>
		   <linux xmlns="2">my name is Readhat</linux>
		   <windows xmlns="3">my name is windows 7</windows>
		 </root>
		*/


	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}
	//CoUninitialize(); 

}

void test2( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("2.xml")}; 
	MSXML2::IXMLDOMDocumentPtr	pDoc;
	MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}
		//声明
		pProInstruction=pDoc->appendChild(pDoc->createProcessingInstruction(TEXT("xml"), TEXT("version='1.0' encoding='utf-8'")));
		pDoc->appendChild(pProInstruction);

		//root
		MSXML2::IXMLDOMElementPtr   pRoot;
		pRoot = pDoc->createElement(TEXT("root"));
		pDoc->appendChild(pRoot);

		//注释
		MSXML2::IXMLDOMCommentPtr pComment = NULL; 
		pComment=pDoc->createComment(TEXT("Settings for MyApp"));
		pDoc->appendChild(pComment);

		//Messages
		MSXML2::IXMLDOMElementPtr pElementMessages = NULL;
		pElementMessages=pDoc->createElement("Messages");
		pRoot->appendChild(pElementMessages);

		//Welcome
		MSXML2::IXMLDOMNodePtr pNodeWelcome = NULL;
		pNodeWelcome=pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("Welcome"),TEXT(""));
		pNodeWelcome->put_text(TEXT("Welcome to MyApp"));
		pElementMessages->appendChild(pNodeWelcome);

		//Farewell
		MSXML2::IXMLDOMNodePtr pNodeFarewell=NULL;
		pNodeFarewell=pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("Farewell"),TEXT(""));
		pNodeFarewell->put_text(TEXT("Thank you for using MyApp"));
		pElementMessages->appendChild(pNodeFarewell);

		//Windows
		MSXML2::IXMLDOMElementPtr pElementWindows = NULL;
		pElementWindows=pDoc->createElement("Windows");
		pRoot->appendChild(pElementWindows);

		//注释
		MSXML2::IXMLDOMCommentPtr pCommentwindow = NULL; 
		pCommentwindow=pDoc->createComment(TEXT(" window name='MainFrame' x='5' y='5' w='400' h='250' "));
		pElementWindows->appendChild(pCommentwindow);

		//hello
		MSXML2::IXMLDOMNodePtr pNodehello = NULL;
		pNodehello=pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("hello"),TEXT(""));
		pNodehello->put_text(TEXT("Welcome to MyApp"));
		pElementWindows->appendChild(pNodehello);

		//visualc
		MSXML2::IXMLDOMNodePtr pNodevisualc = NULL;
		pNodevisualc=pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("visualc"),TEXT(""));
		pNodevisualc->put_text(TEXT("centos"));
		pElementWindows->appendChild(pNodevisualc);

		pDoc->save(szXmlName);

	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}

}



void test3( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("3.xml")}; 
	MSXML2::IXMLDOMDocumentPtr	pDoc;
	MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}
		//声明
		pProInstruction=pDoc->appendChild(pDoc->createProcessingInstruction(TEXT("xml"), TEXT("version='1.0' encoding='gb2312'")));
		pDoc->appendChild(pProInstruction);

		//Demo
		MSXML2::IXMLDOMElementPtr   pDemo;
		pDemo = pDoc->createElement(TEXT("Demo"));
		pDemo->setAttribute("name","Circle");
		pDemo->setAttribute("x","5");
		pDemo->setAttribute("y","5");
		pDemo->setAttribute("radius","3.141590");
		pDoc->appendChild(pDemo);

		pDoc->save(szXmlName);

	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}


}

void test4( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("4.xml")}; 
	MSXML2::IXMLDOMDocumentPtr	pDoc;
	MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}
		//声明
		pProInstruction=pDoc->appendChild(pDoc->createProcessingInstruction(TEXT("xml"), TEXT("version='1.0' encoding='gb2312'")));
		pDoc->appendChild(pProInstruction);

		//root
		MSXML2::IXMLDOMElementPtr   pRoot;
		pRoot = pDoc->createElement(TEXT("root"));
		pDoc->appendChild(pRoot);

		//windows
		MSXML2::IXMLDOMElementPtr   pwindows;
		pwindows = pDoc->createElement(TEXT("windows"));
		pRoot->appendChild(pwindows);

		//window
		MSXML2::IXMLDOMElementPtr   pwindow;
		pwindow = pDoc->createElement(TEXT("window"));
		pwindow->setAttribute("name","MainFrame");
		pwindow->setAttribute("x","5");
		pwindow->setAttribute("y","5");
		pwindow->setAttribute("w","400");
		pwindow->setAttribute("h","250");
		pwindows->appendChild(pwindow);

		//server
		MSXML2::IXMLDOMElementPtr pServer;
		pServer=pDoc->createElement(TEXT("server"));
		pServer->setAttribute(TEXT("name"),TEXT("2003"));
		pServer->setAttribute(TEXT("x"),TEXT("1"));
		pServer->setAttribute(TEXT("y"),TEXT("2"));
		pServer->setAttribute(TEXT("w"),TEXT("3"));
		pServer->setAttribute(TEXT("h"),TEXT("4"));
		pwindows->appendChild(pServer);

        //linux
		MSXML2::IXMLDOMElementPtr   plinux;
		plinux = pDoc->createElement(TEXT("linux"));
		pRoot->appendChild(plinux);

		//centos
		MSXML2::IXMLDOMNodePtr pCentos = NULL;
		pCentos = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("centos"),TEXT(""));
		pCentos->Puttext(TEXT("my name is centos mini 6.5"));
		plinux->appendChild(pCentos); 

		//readhat
		MSXML2::IXMLDOMNodePtr preadhat = NULL;
		preadhat = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("readhat"),TEXT(""));
		preadhat->Puttext(TEXT("my name is readhat"));
		plinux->appendChild(preadhat); 

		//windowsxp
		MSXML2::IXMLDOMNodePtr pwindowsxp = NULL;
		pwindowsxp = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("windowsxp"),TEXT(""));
		pwindowsxp->Puttext(TEXT("my name is windows xp"));
		plinux->appendChild(pwindowsxp); 

		//windows7
		MSXML2::IXMLDOMNodePtr pwindows7 = NULL;
		pwindows7 = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("windows7"),TEXT(""));
		pwindows7->Puttext(TEXT("my name is windows 7"));
		plinux->appendChild(pwindows7); 

		//windows8
		MSXML2::IXMLDOMNodePtr pwindows8 = NULL;
		pwindows8 = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("windows8"),TEXT(""));
		pwindows8->Puttext(TEXT("my name is windows 8"));
		plinux->appendChild(pwindows8); 

        //ddosip
		MSXML2::IXMLDOMElementPtr pddosip;
		pddosip=pDoc->createElement(TEXT("ddosip"));
		pddosip->setAttribute(TEXT("ip"),TEXT("192.168.1.1"));
		pddosip->setAttribute(TEXT("time"),TEXT("12345678"));
		pRoot->appendChild(pddosip);

		//Connetion
		MSXML2::IXMLDOMElementPtr pConnetion;
		pConnetion=pDoc->createElement(TEXT("Connetion"));
		pConnetion->setAttribute(TEXT("ip"),TEXT("192.168.0.1"));
		pConnetion->setAttribute(TEXT("timeout"),TEXT("123.456000"));
		pRoot->appendChild(pConnetion);



		pDoc->save(szXmlName);

	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}

}

void test5( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("5.xml")}; 
	MSXML2::IXMLDOMDocumentPtr	pDoc;
	MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}
		//声明
		pProInstruction=pDoc->appendChild(pDoc->createProcessingInstruction(TEXT("xml"), TEXT("version='1.0' encoding='gb2312'")));
		pDoc->appendChild(pProInstruction);

		//class
		MSXML2::IXMLDOMElementPtr   pClass;
		pClass = pDoc->createElement(TEXT("Class"));
        pClass->setAttribute(TEXT("name"),TEXT("计算机软件班"));
		pDoc->appendChild(pClass);

        //Students
		MSXML2::IXMLDOMElementPtr   pStudents;
		pStudents = pDoc->createElement(TEXT("Students"));
		pClass->appendChild(pStudents);

		//Student
		MSXML2::IXMLDOMElementPtr   pStudent;
		pStudent = pDoc->createElement(TEXT("Student"));
		pStudent->setAttribute(TEXT("name"),TEXT("张三"));
		pStudent->setAttribute(TEXT("age"),TEXT("22"));
		pStudent->setAttribute(TEXT("sex"),TEXT("男"));
		pStudent->setAttribute(TEXT("studentNo"),TEXT("13031001"));
		pStudents->appendChild(pStudent);

		//hone
		MSXML2::IXMLDOMNodePtr   pPhone;
		pPhone = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("Phone"),TEXT(""));
		pPhone->Puttext(TEXT("88208888"));
		pStudent->appendChild(pPhone);


		//address
		MSXML2::IXMLDOMNodePtr   paddress;
		paddress = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("address"),TEXT(""));
		paddress->Puttext(TEXT("西安市太白南路二号"));
		pStudent->appendChild(paddress);



		//Student
		MSXML2::IXMLDOMElementPtr   pStudent1;
		pStudent1 = pDoc->createElement(TEXT("Student"));
		pStudent1->setAttribute(TEXT("name"),TEXT("李四"));
		pStudent1->setAttribute(TEXT("age"),TEXT("22"));
		pStudent1->setAttribute(TEXT("sex"),TEXT("男"));
		pStudent1->setAttribute(TEXT("studentNo"),TEXT("13031002"));
		pStudents->appendChild(pStudent1);

		//hone
		MSXML2::IXMLDOMNodePtr   pPhone1;
		pPhone1 = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("Phone"),TEXT(""));
		pPhone1->Puttext(TEXT("8820666"));
		pStudent1->appendChild(pPhone1);


		//address
		MSXML2::IXMLDOMNodePtr   paddress1;
		paddress1 = pDoc->createNode(MSXML2::NODE_ELEMENT,TEXT("address"),TEXT(""));
		paddress1->Puttext(TEXT("西安市光华路"));
		pStudent1->appendChild(paddress1);


		pDoc->save(szXmlName);

	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}
}


void test6( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("1.xml")}; 
	MSXML2::IXMLDOMDocumentPtr pDoc = NULL;                         // xml文档
	MSXML2::IXMLDOMNodeListPtr pNodeList = NULL;                    // 节点链表
	MSXML2::IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)
	MSXML2::IXMLDOMNodePtr pNode = NULL, pNode1 = NULL;             // 节点
	MSXML2::IXMLDOMNamedNodeMapPtr pAttrList = NULL;                // 属性链表
	MSXML2::IXMLDOMAttributePtr pAttrNode = NULL;                   // 属性
	long lChilds, lAttr, i;
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}

		VARIANT_BOOL bXmlLoad = pDoc->load(szXmlName);
		if (!bXmlLoad)
		{
			printf("加载%s失败\n",szXmlName);
			return ;
		}

        //根节点
		pRootElement = pDoc->GetdocumentElement();
		printf("%s\n", (char*)pRootElement->GetnodeName()); 


		//根节点的一级子节点
		pNodeList = pRootElement->GetchildNodes(); //pRootElement->childNodes
		lChilds = pNodeList->Getlength();          //pNodeList->length
		for (i = 0; i < lChilds; i++)
		{
			pNode = pNodeList->Getitem(i); // pNodeList->item[i]
			if (pNode->GetnodeType() != MSXML2::NODE_COMMENT) // 过滤注释节点
			{
				printf(" %s   %s\n",(char*)pNode->GetnodeName(),(char*)pNode->Gettext());
			}
		}
	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}

}

void test7( void )
{

	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("2.xml")}; 
	MSXML2::IXMLDOMDocumentPtr pDoc = NULL;                         // xml文档
	MSXML2::IXMLDOMNodeListPtr pNodeList = NULL;                    // 节点链表
	MSXML2::IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)
	MSXML2::IXMLDOMNodePtr pNode = NULL, pNode1 = NULL;             // 节点
	MSXML2::IXMLDOMNamedNodeMapPtr pAttrList = NULL;                // 属性链表
	MSXML2::IXMLDOMAttributePtr pAttrNode = NULL;                   // 属性
	long lChilds, lAttr, i;
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}

		VARIANT_BOOL bXmlLoad = pDoc->load(szXmlName);
		if (!bXmlLoad)
		{
			printf("加载%s失败\n",szXmlName);
			return ;
		}

		//根节点
		pRootElement = pDoc->GetdocumentElement();
		printf("%s\n", (char*)pRootElement->GetnodeName()); 

		//根节点的一级子节点
		pNodeList = pRootElement->GetchildNodes();
		lChilds = pNodeList->Getlength(); 
		for (i = 0; i < lChilds; i++)
		{
			pNode = pNodeList->Getitem(i); 
			if (pNode->GetnodeType() != MSXML2::NODE_COMMENT) // 过滤注释节点
			{
				printf("%s\n",(char*)pNode->GetnodeName());
			}
		}

		//查找节点<Messages>下的所有子节点
		// "//"表示在任意一层寻找Messages;"//*"查找<Messages></Messages>中的所有子节点
		pNodeList = pDoc->selectNodes((_bstr_t)(char*)"//Messages//*");
		while (pNode = pNodeList->nextNode())
		{
			printf("%s   %s\n", (char*)pNode->GetnodeName(),(char*)pNode->Gettext());
		}

		//查找节点<Windows>下的所有子节点
		pNodeList = pDoc->selectNodes((_bstr_t)(char*)"//Windows//*");
		while (pNode = pNodeList->nextNode())
		{
			printf("%s  %s\n", (char*)pNode->GetnodeName(),(char*)pNode->Gettext());
		}


	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}
}


void test8( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("3.xml")}; 
	MSXML2::IXMLDOMDocumentPtr pDoc = NULL;                         // xml文档
	MSXML2::IXMLDOMNodeListPtr pNodeList = NULL;                    // 节点链表
	MSXML2::IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)
	MSXML2::IXMLDOMNodePtr pNode = NULL, pNode1 = NULL;             // 节点
	MSXML2::IXMLDOMNamedNodeMapPtr pAttrList = NULL;                // 属性链表
	MSXML2::IXMLDOMAttributePtr pAttrNode = NULL;                   // 属性
	long lChilds, lAttr, i;
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}
		VARIANT_BOOL bXmlLoad = pDoc->load(szXmlName);
		if (!bXmlLoad)
		{
			printf("加载%s失败\n",szXmlName);
			return ;
		}

		//根节点
		pRootElement = pDoc->GetdocumentElement();
		printf("%s\n", (char*)pRootElement->GetnodeName()); 


		pAttrList = pRootElement->Getattributes();
		lAttr = pAttrList->Getlength();
		for (i = 0; i < lAttr; i++)
		{
			pAttrNode = pAttrList->Getitem(i);
			printf("%s  %s\n",(char*)pAttrNode->GetnodeName(), (char*)pAttrNode->Gettext());
		}
	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}

}

void test9( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("4.xml")}; 
	MSXML2::IXMLDOMDocumentPtr pDoc = NULL;                         // xml文档
	MSXML2::IXMLDOMNodeListPtr pNodeList = NULL;                    // 节点链表
	MSXML2::IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)
	MSXML2::IXMLDOMNodePtr pNode = NULL, pNode1 = NULL;             // 节点
	MSXML2::IXMLDOMNamedNodeMapPtr pAttrList = NULL;                // 属性链表
	MSXML2::IXMLDOMAttributePtr pAttrNode = NULL;                   // 属性
	long lChilds, lAttr, i;
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}
		VARIANT_BOOL bXmlLoad = pDoc->load(szXmlName);
		if (!bXmlLoad)
		{
			printf("加载%s失败\n",szXmlName);
			return ;
		}

		//根节点
		pRootElement = pDoc->GetdocumentElement();
		printf("%s\n", (char*)pRootElement->GetnodeName()); 


		//根节点的一级子节点
		pNodeList = pRootElement->GetchildNodes();
		lChilds = pNodeList->Getlength(); 
		for (i = 0; i < lChilds; i++)
		{
			pNode = pNodeList->Getitem(i); 
			if (pNode->GetnodeType() != MSXML2::NODE_COMMENT) // 过滤注释节点
			{
				printf(" %s\n",(char*)pNode->GetnodeName());
			}
		}


		//查找节点<Windows>下的所有子节点
		pNodeList = pDoc->selectNodes((_bstr_t)(char*)"//windows//*");
		while (pNode = pNodeList->nextNode())
		{
			printf("%s\n", (char*)pNode->GetnodeName());

			pAttrList = pNode->Getattributes();
			lAttr = pAttrList->Getlength();
			for (i = 0; i < lAttr; i++)
			{
				pAttrNode = pAttrList->Getitem(i);
				printf("%s  %s\n",(char*)pAttrNode->GetnodeName(), (char*)pAttrNode->Gettext());
			}
		}

		//查找节点<linux>下的所有子节点
		pNodeList = pDoc->selectNodes((_bstr_t)(char*)"//linux//*");
		while (pNode = pNodeList->nextNode())
		{
		   printf("%s  %s\n", (char*)pNode->GetnodeName(),(char*)pNode->Gettext());

		}

		//ddosip
		pNodeList=pRootElement->GetchildNodes();
		pNode=pNodeList->Getitem(2);
		printf("%s\n", (char*)pNode->GetnodeName());
		pAttrList = pNode->Getattributes();
		lAttr = pAttrList->Getlength();
		for (i = 0; i < lAttr; i++)
		{
			pAttrNode = pAttrList->Getitem(i);
			printf("%s  %s\n",(char*)pAttrNode->GetnodeName(), (char*)pAttrNode->Gettext());
		}

		pNode=pNodeList->Getitem(3);
		printf("%s\n", (char*)pNode->GetnodeName());
		pAttrList = pNode->Getattributes();
		lAttr = pAttrList->Getlength();
		for (i = 0; i < lAttr; i++)
		{
			pAttrNode = pAttrList->Getitem(i);
			printf("%s  %s\n",(char*)pAttrNode->GetnodeName(), (char*)pAttrNode->Gettext());
		}
	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}

}


void test10( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("5.xml")}; 
	MSXML2::IXMLDOMDocumentPtr pDoc = NULL;                         // xml文档
	MSXML2::IXMLDOMNodeListPtr pNodeList = NULL;                    // 节点链表
	MSXML2::IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)
	MSXML2::IXMLDOMNodePtr pNode = NULL, pNode1 = NULL;             // 节点
	MSXML2::IXMLDOMNamedNodeMapPtr pAttrList = NULL;                // 属性链表
	MSXML2::IXMLDOMAttributePtr pAttrNode = NULL;                   // 属性
	long lChilds, lAttr, i;
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}
		VARIANT_BOOL bXmlLoad = pDoc->load(szXmlName);
		if (!bXmlLoad)
		{
			printf("加载%s失败\n",szXmlName);
			return ;
		}

		//根节点
		pRootElement = pDoc->GetdocumentElement();
		printf("%s\n", (char*)pRootElement->GetnodeName()); 
		pAttrList=pRootElement->Getattributes();
		lAttr = pAttrList->Getlength();
		pAttrList->Getitem(lAttr);
		for (i = 0; i < lAttr; i++)
		{
			pAttrNode = pAttrList->Getitem(i);
			printf("%s  %s\n",(char*)pAttrNode->GetnodeName(), (char*)pAttrNode->Gettext());
		}

		//查找节点<Students>下的所有子节点
		pNodeList = pDoc->selectNodes((_bstr_t)(char*)"//Students//*");
		while (pNode = pNodeList->nextNode())
		{
			printf("%s   %s\n", (char*)pNode->GetnodeName(),(char*)pNode->Gettext());
			pAttrList = pNode->Getattributes();
			lAttr = pAttrList->Getlength();
			for (i = 0; i < lAttr; i++)
			{
				pAttrNode = pAttrList->Getitem(i);
				printf("%s  %s\n",(char*)pAttrNode->GetnodeName(), (char*)pAttrNode->Gettext());
			}
		}
	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}

}

void test100( void )
{
	//定义变量
	TCHAR szError[128]={0};
	TCHAR szXmlName[MAX_PATH]={TEXT("100.xml")}; 
	MSXML2::IXMLDOMDocumentPtr	pDoc;
	MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明
	HRESULT Localhr = S_OK;
	CoInitialize(NULL);
	try
	{
		Localhr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
		if(FAILED(Localhr)) 
		{
			printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!\n");
			_com_issue_error(Localhr);
		}
		//声明
		pProInstruction=pDoc->appendChild(pDoc->createProcessingInstruction(TEXT("xml"), TEXT("version='1.0' encoding='gb2312'")));
		pDoc->appendChild(pProInstruction);

		//root
		MSXML2::IXMLDOMElementPtr   pRoot;
		pRoot = pDoc->createElement(TEXT("root"));
		pDoc->appendChild(pRoot);

		pDoc->save(szXmlName);

	}
	catch(_com_error& e)
	{
		_sntprintf_s(szError,sizeof(szError),TEXT("Error code:%d\nError Message:%s\nError Description:%s"),(int)e.WCode(), e.ErrorMessage(), (char*)e.Description());
		MessageBox(NULL,szError, TEXT("错误"),MB_OK|MB_ICONSTOP);
		return ;
	}


}



/*
MSXML2::IXMLDOMDocumentPtr pDoc = NULL; // xml文档

MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明

MSXML2::IXMLDOMCommentPtr pComment = NULL; // 注释

MSXML2::IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)

MSXML2::IXMLDOMNodePtr pNode = NULL, pNode1 = NULL, pNode2 = NULL; // 节点

MSXML2::IXMLDOMAttributePtr pAttrNode = NULL; // 属性
*/


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值