网址: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系统文章。