【轉】xml節點解析成字符串的方法


網址:http://blog.csdn.net/shanzhizi/article/details/8817532

 

ZC: 這是 libxml2的

 

之前匯總了一篇關於xml文檔與字符串轉換的文章,文章主要是說明了如何將整個xml文檔解析成字符串,並沒有說明將xml文檔中的某個節點轉換成字符串的方法。項目中需要這個功能,所以就研究了一下,下面貼出代碼供參考使用。

來自:http://blog.csdn.net/shanzhizi

主要用到的libxml2的函數是:xmlNodeDump

下面這個函數可以將指定的節點以字符串的格式輸出,包含<nodename></nodename>以及該節點的子節點。

 

int PrintXMLNodeString(const char *pXMLFilePath,const char *pNodeName)
{
	xmlDocPtr doc;   //定義解析文檔指針
	xmlNodePtr curNode;  //定義結點指針(你需要它為了在各個結點間移動)
	const char *szDocName = pXMLFilePath;

	//szDocName = pXMLFilePath;
	doc = xmlReadFile(szDocName,"GB2312",XML_PARSE_RECOVER);  //解析文件
	if (NULL == doc){    
		fprintf(stderr,"Document not parsed successfully. \n");     
		return -1;
	}
	curNode = xmlDocGetRootElement(doc);

	if (NULL == curNode){
		fprintf(stderr,"empty document\n");
		xmlFreeDoc(doc);
		return -1;
	}

	
	curNode = curNode->children;
	while (NULL != curNode){    
		//修改newNode2的內容
		if (!xmlStrcmp(curNode->name, BAD_CAST pNodeName)){
			xmlBufferPtr nodeBuffer = xmlBufferCreate();
			if(xmlNodeDump(nodeBuffer,doc,curNode, 0, 1) > 0){
				printf("%s\n",(char *)nodeBuffer->content);
				printf("use:%d\nsize:%d\n",nodeBuffer->use,nodeBuffer->size);
			}
			xmlBufferFree(nodeBuffer);
			break;
		}

		curNode = curNode->next;
	}
	
	printf("game over\n");
	xmlFreeDoc(doc);
	return 0;

 


關於其他的xml文章請參考:xml系統文章

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM