#include <stdio.h>
#include <string.h>
#include <libxml2/libxml/parser.h>
#include <libxml2/libxml/tree.h>
//
// http://www.cnblogs.com/qq78292959/archive/2012/05/11/2496327.html
//
// 1.先在Framework中加入libxml2.dylib
// 2.在"Header Search Path"中加入"${SDK_ROOT}/usr/include/libxml2"
// 3.包含头文件"libxml2/libxml/parser.h"和"libxml2/libxml/tree.h"
//
void saveXml()
{
// 生成文档头(初始化)
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");
// 生成career节点(根节点)
xmlNodePtr career = xmlNewNode(NULL, BAD_CAST "career");
xmlDocSetRootElement(doc, career);
// 生成career的子节点
xmlNodePtr warrior = xmlNewNode(NULL, BAD_CAST "warrior");
xmlAddChild(career, warrior);
xmlNodePtr wizards = xmlNewNode(NULL, BAD_CAST "wizards");
xmlAddChild(career, wizards);
// 生成warrior的子节点
xmlNodePtr saber_player = xmlNewTextChild(warrior, NULL, BAD_CAST "player", BAD_CAST "saber");
xmlSetProp(saber_player, BAD_CAST "str", BAD_CAST "80");
xmlSetProp(saber_player, BAD_CAST "ini", BAD_CAST "63");
// 生成mage的子节点
xmlNodePtr lin_player = xmlNewTextChild(wizards, NULL, BAD_CAST "player", BAD_CAST "lin");
xmlSetProp(lin_player, BAD_CAST "str", BAD_CAST "10");
xmlSetProp(lin_player, BAD_CAST "ini", BAD_CAST "53");
xmlNodePtr red_player = xmlNewTextChild(wizards, NULL, BAD_CAST "player", BAD_CAST "red");
xmlSetProp(red_player, BAD_CAST "str", BAD_CAST "20");
xmlSetProp(red_player, BAD_CAST "ini", BAD_CAST "73");
// 写入文件
int ret = xmlSaveFile("./career.xml", doc);
if (ret != -1)
{
printf("create a xml:%dbytes\n", ret);
}
// 释放资源
xmlFreeDoc(doc);
}
int loadXml()
{
// 加载文件(初始化)
xmlDocPtr doc = xmlParseFile("./career.xml");
if(doc == NULL)
{
printf("parse failed!\n");
return -1;
}
// 取得career节点
xmlNodePtr career = xmlDocGetRootElement(doc);
// 遍历career的子节点
for (xmlNodePtr careerChild = career->children; careerChild; careerChild = careerChild->next)
{
// 找到warrior节点
if (xmlStrcasecmp(careerChild->name, BAD_CAST "warrior") == 0)
{
}
// 找到wizards节点
else if (xmlStrcasecmp(careerChild->name, BAD_CAST "wizards") == 0)
{
// 遍历wizards的子节点
for(xmlNodePtr wizardsChild = careerChild->children; wizardsChild; wizardsChild = wizardsChild->next)
{
// 找到player节点
if (xmlStrcasecmp(wizardsChild->name, BAD_CAST "player") == 0)
{
xmlChar* str = xmlGetProp(wizardsChild, BAD_CAST "str");
xmlChar* ini = xmlGetProp(wizardsChild, BAD_CAST "ini");
xmlChar* txt = xmlNodeGetContent(wizardsChild);
printf("player: str = %s ini = %s txt = %s\n", (char*)str, (char*)ini, (char*)txt);
xmlFree(str);
xmlFree(ini);
xmlFree(txt);
}
}
}
}
// 完成解析, 释放资源
xmlFreeDoc(doc);
return 0;
}
int main(int argc, const char * argv[])
{
saveXml();
loadXml();
return 0;
}
No.15 Xcode(5.1.x) libxml2
最新推荐文章于 2021-11-30 14:41:57 发布