zoukankan      html  css  js  c++  java
  • 【转】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. 
    ");     
    		return -1;
    	}
    	curNode = xmlDocGetRootElement(doc);
    
    	if (NULL == curNode){
    		fprintf(stderr,"empty document
    ");
    		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
    ",(char *)nodeBuffer->content);
    				printf("use:%d
    size:%d
    ",nodeBuffer->use,nodeBuffer->size);
    			}
    			xmlBufferFree(nodeBuffer);
    			break;
    		}
    
    		curNode = curNode->next;
    	}
    	
    	printf("game over
    ");
    	xmlFreeDoc(doc);
    	return 0;


    关于其他的xml文章请参考:xml系统文章

  • 相关阅读:
    jq 京东跳楼效果
    *Sum of NestedInteger
    **Minimum Window Substring & String类问题模板
    **Word Ladder
    *Longest Increasing Subsequence
    *Kth Largest Element in an Array
    *Permutations II
    *Implement Stack using Queues
    *Paint House II
    *Paint Fence
  • 原文地址:https://www.cnblogs.com/cppskill/p/7918892.html
Copyright © 2011-2022 走看看