【转】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系统文章。