xml保存数据
2012-08-30 17:41
232 查看
一、安装libxml2
1、ubuntu安装:Sudo apt-get install Libxml2
2、交叉编译:下载libxml2库并解压,地址:http://xmlsoft.org/sources/libxml2-sources-2.7.8.tar.gz
./configure --host=mipsel-linux --prefix=/opt/libxml2
Make
Make install
编译程序时使用命令:mipsel-linux-gcc test.c -o test -I/opt/libxml2/include/libxml2/ -L/opt/libxml2/lib -lxml2
二、xml保存数据
init.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<test>
<testone></testone>
<testtwo>second</testtwo>
<testthree>first</testthree>
</test>
<reference>
<referenceone>aaa</referenceone>
</reference>
</root>
test.c文件:
#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
struct testdata{
char testone[20];
char testtwo[20];
char testthree[20];
};
int xml_parse(struct testdata testsave)
{
xmlDocPtr doc; //定义解析文档指针
xmlNodePtr curNode,detail; //定义结点指针(你需要它为了在各个结点间移动)
xmlChar *szKey; //临时字符串变量
char *szDocName;
szDocName = "init.xml";
doc = xmlReadFile(szDocName,"UTF-8",XML_PARSE_RECOVER); //解析文件
if (NULL == doc)
{
fprintf(stderr,"Document not parsed successfully. \n");
return -1;
}
curNode = xmlDocGetRootElement(doc); //确定文档根元素
xmlNodePtr propNodePtr = curNode;
while(curNode != NULL)
{
if(xmlStrcasecmp(curNode->name,BAD_CAST"test")==0){
for(detail=curNode->children;detail;detail=detail->next){
if(xmlStrcasecmp(detail->name,BAD_CAST"testone")==0)
{
xmlNodeSetContent(detail, BAD_CAST testsave.testone);
}
else if(xmlStrcasecmp(detail->name,BAD_CAST"testtwo")==0)
{
xmlNodeSetContent(detail, BAD_CAST testsave.testtwo);
}
else if(xmlStrcasecmp(detail->name,BAD_CAST"testthree")==0)
{
xmlNodeSetContent(detail, BAD_CAST testsave.testthree);
}
}
}
curNode = curNode->next;
}
int nRel = xmlSaveFile("init.xml",doc);
xmlFreeDoc(doc);
return 1;
}
int main(void)
{
struct testdata testsave={"first","second","third"};
xml_parse(testsave);
return 0;
}
编译test.c:gcc test.c -o test -lxml2
执行test后,init.xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<test>
<testone>first</testone>
<testtwo>second</testtwo>
<testthree>third</testthree>
</test>
<reference>
<referenceone>aaa</referenceone>
</reference>
</root>
1、ubuntu安装:Sudo apt-get install Libxml2
2、交叉编译:下载libxml2库并解压,地址:http://xmlsoft.org/sources/libxml2-sources-2.7.8.tar.gz
./configure --host=mipsel-linux --prefix=/opt/libxml2
Make
Make install
编译程序时使用命令:mipsel-linux-gcc test.c -o test -I/opt/libxml2/include/libxml2/ -L/opt/libxml2/lib -lxml2
二、xml保存数据
init.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<test>
<testone></testone>
<testtwo>second</testtwo>
<testthree>first</testthree>
</test>
<reference>
<referenceone>aaa</referenceone>
</reference>
</root>
test.c文件:
#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
struct testdata{
char testone[20];
char testtwo[20];
char testthree[20];
};
int xml_parse(struct testdata testsave)
{
xmlDocPtr doc; //定义解析文档指针
xmlNodePtr curNode,detail; //定义结点指针(你需要它为了在各个结点间移动)
xmlChar *szKey; //临时字符串变量
char *szDocName;
szDocName = "init.xml";
doc = xmlReadFile(szDocName,"UTF-8",XML_PARSE_RECOVER); //解析文件
if (NULL == doc)
{
fprintf(stderr,"Document not parsed successfully. \n");
return -1;
}
curNode = xmlDocGetRootElement(doc); //确定文档根元素
xmlNodePtr propNodePtr = curNode;
while(curNode != NULL)
{
if(xmlStrcasecmp(curNode->name,BAD_CAST"test")==0){
for(detail=curNode->children;detail;detail=detail->next){
if(xmlStrcasecmp(detail->name,BAD_CAST"testone")==0)
{
xmlNodeSetContent(detail, BAD_CAST testsave.testone);
}
else if(xmlStrcasecmp(detail->name,BAD_CAST"testtwo")==0)
{
xmlNodeSetContent(detail, BAD_CAST testsave.testtwo);
}
else if(xmlStrcasecmp(detail->name,BAD_CAST"testthree")==0)
{
xmlNodeSetContent(detail, BAD_CAST testsave.testthree);
}
}
}
curNode = curNode->next;
}
int nRel = xmlSaveFile("init.xml",doc);
xmlFreeDoc(doc);
return 1;
}
int main(void)
{
struct testdata testsave={"first","second","third"};
xml_parse(testsave);
return 0;
}
编译test.c:gcc test.c -o test -lxml2
执行test后,init.xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<test>
<testone>first</testone>
<testtwo>second</testtwo>
<testthree>third</testthree>
</test>
<reference>
<referenceone>aaa</referenceone>
</reference>
</root>
相关文章推荐
- 保存xml数据到数据库的程序实现
- Android学习(22) -- 数据存储之使用xml保存数据
- 在离线状态下保存数据可能会用到的XML文件读写
- 【黑马Android】(02)短信发送器/布局演示/android下单位/android下Junit/保存数据/android下权限/xml解析和序列化
- 使用dom4j将数据库中的数据保存到xml文件中
- 采用xml的方式保存数据
- C# 将数据保存进xml文件
- 用javascript读取xml,并进行修改xml数据,解决保存没有权限问题
- 将matlab的数据保存xml 在c++下通过opencv读取;
- [drp 4] 使用dom4j,读取XML数据,保存至数据库
- Android开发实现读取excel数据并保存为xml的方法
- 在Cakephp中使用XML和Memcache持久化保存数据
- 使用XML保存数据
- [drp 4] 使用dom4j,读取XML数据,保存至数据库
- 问题:XML数据应该以何种方式保存进数据库。
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 【转】Unity3D结合XML载入和保存数据
- [置顶] Cocos2d-x 深入解析系列:以XML文件方式保存用户数据
- js动态添加行hiddenfield保存xml或json 数据 提交给后台处理
- android手机端保存xml数据