xml基础训练

前端之家收集整理的这篇文章主要介绍了xml基础训练前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
IXMLDOMDocumentPtr pDoc;
	IXMLDOMNodePtr pXmlInstruction;

	HRESULT hr = pDoc.CreateInstance("Microsoft.XMLDOM");

	CComVariant vFileName("ReadXML.xml");
	CComVariant cComVari;
	VARIANT_BOOL vb;
	hr = pDoc->load(vFileName,&vb);

	BSTR bstrInfo;
	BSTR bstrInfo2;
	VARIANT vInfo;

	//文档节点
	pDoc->get_nodeName(&bstrInfo);	//#document
	SysFreeString(bstrInfo);
	pDoc->get_nodeValue(&vInfo);		//NULL
	
	//第一个节点都是通过 document 的 get_firstChild 来获取
	hr = pDoc->get_firstChild(&pXmlInstruction);
#if 0	
	//<?xml version="1.0" encoding="gb2312"?>
	pXmlInstruction->get_nodeName(&bstrInfo);	//xml
	SysFreeString(bstrInfo);
	pXmlInstruction->get_nodeValue(&vInfo);	//version="1.0" encoding="gb2312"
	pXmlInstruction->get_text(&bstrInfo);			//version="1.0" encoding="gb2312"
	SysFreeString(bstrInfo);
	pXmlInstruction->get_dataType(&vInfo);		//null
	pXmlInstruction->get_nodeTypeString(&bstrInfo);//processinginstruction
	SysFreeString(bstrInfo);
#endif

	IXMLDOMNodePtr pComment1;
	pXmlInstruction->get_nextSibling(&pComment1);
#if 0			//注释操作
	//<!--  Copyright w3school.com.cn -->
	pComment1->get_nodeName(&bstrInfo);		//#comment
	SysFreeString(bstrInfo);
	pComment1->get_nodeValue(&vInfo);	// Copyright w3school.com.cn 
	pComment1->get_text(&bstrInfo);			// Copyright w3school.com.cn 
	SysFreeString(bstrInfo);
	pComment1->get_nodeTypeString(&bstrInfo);	//comment
	SysFreeString(bstrInfo);

	//cComVari = "注释修改";
	//pComment1->put_nodeValue(cComVari);		//ok
	bstrInfo = _com_util::ConvertStringToBSTR("注释修改123456");
	pComment1->put_text(bstrInfo);
	SysFreeString(bstrInfo);
#endif

	IXMLDOMNodePtr pStoreNode;
#if 0	//storelist节点
		IXMLDOMNodeListPtr pStoreList;
		bstrInfo = _com_util::ConvertStringToBSTR("bookstore");
		hr = pDoc->getElementsByTagName(bstrInfo,&pStoreList);
		SysFreeString(bstrInfo);
		long lCount;
		hr = pStoreList->get_length(&lCount);	//1

		IXMLDOMNodePtr pNextNode;
		hr = pStoreList->get_item(0,&pNextNode);
		pNextNode->get_nodeName(&bstrInfo);		//bookstore
		pNextNode->get_nodeValue(&vInfo);			//null

		//所有文本:Harry Potter J K. Rowling 2005 29.99 
		//Everyday Italian Giada De Laurentiis 2005 30.00 
		//Learning XML Erik T. Ray 2003 39.95 
		//XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99
		pNextNode->get_text(&bstrInfo2);				
		SysFreeString(bstrInfo);
		SysFreeString(bstrInfo2);
#endif

#if 0	//通过 getElementsByTagName 来访问元素
		IXMLDOMNodeListPtr pTitleList;
		bstrInfo = _com_util::ConvertStringToBSTR("title");
		hr = pDoc->getElementsByTagName(bstrInfo,&pTitleList);
		SysFreeString(bstrInfo);
		long lCount;
		hr = pTitleList->get_length(&lCount);	//4

		IXMLDOMNodePtr pListElement;
		for(long lLoop = 0; lLoop < lCount; lLoop++)
		{
			pTitleList->get_item(lLoop,&pListElement);
			
			//访问属性
			IXMLDOMNamedNodeMapPtr pAttriNodeMap;
			long lAttriListLength;
			pListElement->get_attributes(&pAttriNodeMap);
			pAttriNodeMap->get_length(&lAttriListLength);//[0]:1	
			for(long lAttriLoop = 0; lAttriLoop < lAttriListLength; lAttriLoop++)
			{
				IXMLDOMNodePtr pNode;
				pAttriNodeMap->get_item(lAttriLoop,&pNode);
				pNode->get_nodeName(&bstrInfo);//[0]:lang1	[1]:lang2	[2]:lang3		[3]:lang4
				pNode->get_nodeValue(&vInfo);//[0]:en1	[1]:en2		[2]:en3		[3]:en4
				pNode->get_text(&bstrInfo2);//[0]:en1	[1]:en2		[2]:en3		[3]:en4
				SysFreeString(bstrInfo);
				SysFreeString(bstrInfo2);

				pNode->get_nodeTypeString(&bstrInfo);//[0]:attribute
				SysFreeString(bstrInfo);
			}

			pListElement->get_nodeValue(&vInfo);//null
			pListElement->get_text(&bstrInfo);//[0]:Harry Potter	[1]:Everyday Italian	[2]:Learning XML [3]:XQuery Kick Start
			pListElement->get_nodeTypeString(&bstrInfo2);//element
			SysFreeString(bstrInfo);
			SysFreeString(bstrInfo2);
		}
#endif

#if 0//修改节点
		IXMLDOMNodeListPtr pAuthorList;
		bstrInfo = _com_util::ConvertStringToBSTR("author");
		pDoc->getElementsByTagName(bstrInfo,&pAuthorList);
		SysFreeString(bstrInfo);

		long lAuthorNumber;
		pAuthorList->get_length(&lAuthorNumber);

		IXMLDOMNodePtr pAuthorNode;
		pAuthorList->get_item(lAuthorNumber - 1,&pAuthorNode);
#if 1		//通过 pAuthorNode 和 pChildOfAuthor 都可以成功修改 author 内容
			//pAuthorNode 是元素节点  pChildOfAuthor则是文本节点
		pAuthorNode->get_nodeName(&bstrInfo2);//author
		pAuthorNode->get_nodeTypeString(&bstrInfo);//element
		pAuthorNode->get_nodeValue(&vInfo);//null
		SysFreeString(bstrInfo);
		SysFreeString(bstrInfo2);
		bstrInfo = _com_util::ConvertStringToBSTR("test");
		pAuthorNode->put_text(bstrInfo);		//可以成功修改
		SysFreeString(bstrInfo);
#else
		IXMLDOMNodePtr pChildOfAuthor;
		pAuthorNode->get_firstChild(&pChildOfAuthor);
		pChildOfAuthor->get_nodeName(&bstrInfo2);//#text
		pChildOfAuthor->get_nodeTypeString(&bstrInfo);//text
		pChildOfAuthor->get_nodeValue(&vInfo);//Vaidyanathan Nagarajan
		SysFreeString(bstrInfo);
		SysFreeString(bstrInfo2);
		bstrInfo = _com_util::ConvertStringToBSTR("shenzhen");
		pChildOfAuthor->put_text(bstrInfo);
		SysFreeString(bstrInfo);
#endif
#endif

#if 1//修改属性
		IXMLDOMNodeListPtr pBookList;
		bstrInfo = _com_util::ConvertStringToBSTR("book");
		pDoc->getElementsByTagName(bstrInfo,&pBookList);
		SysFreeString(bstrInfo);

		long lBookNum;
		pBookList->get_length(&lBookNum);
		for(long lLoop = 0; lLoop < lBookNum; lLoop++)
		{
			IXMLDOMNodePtr pBookNode;
			pBookList->get_item(lLoop,&pBookNode);

			IXMLDOMNamedNodeMapPtr pAttriMap;
			pBookNode->get_attributes(&pAttriMap);

			long lAttriNum;
			pAttriMap->get_length(&lAttriNum);
			for(long lAttriLoop = 0; lAttriLoop < lAttriNum; lAttriLoop++)
			{
				IXMLDOMNodePtr pElementOfAttriMap;
				pAttriMap->get_item(lAttriLoop,&pElementOfAttriMap);
				pElementOfAttriMap->get_nodeName(&bstrInfo);
				SysFreeString(bstrInfo);
				hr = pElementOfAttriMap->get_nodeValue(&vInfo);
				
				char *pszAttri = _com_util::ConvertBSTRToString(vInfo.bstrVal);
				CString strAttri(pszAttri);
				strAttri += "'s book";
				vInfo.bstrVal = strAttri.AllocSysString();
				delete []pszAttri;

				hr = pElementOfAttriMap->put_nodeValue(vInfo);
			}

			//IXMLDOMNodePtr pChildOfBook;
			//pBookNode->get_firstChild(&pChildOfBook);//获取到title子节点,与要获取属性不符
			//pChildOfBook->get_nodeName(&bstrInfo);//获取到title子节点,与要获取属性不符
			//SysFreeString(bstrInfo);
		}
#endif

		cComVari = "D:\\Other\\XX_学习资料\\IT\\MSXML\\new.xml";
		pDoc->save(cComVari);


对应xml:

<?xml version="1.0" encoding="gb2312"?> <!-- Copyright w3school.com.cn --> <bookstore> <book category="children"> <title lang1="en1">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="cooking"> <title lang2="en2">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="web" cover="paperback"> <title lang3="en3">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> <book category="web"> <title lang4="en4">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> </bookstore>

猜你在找的XML相关文章