c 根据libxml库解析xml文件
2015-06-05 14:21
393 查看
最近做一个android工厂测试,里面需要一个解析xml文件,以前用java c#解析过xml,这次用c解析xml首先是第一次,下面是上代码先
首先引用头文件:
#include <libxml/parser.h>
//doc是xml路径
//rootNode是叶子节点
//cameraName是xml中的Profiles的name
//cv和ch指针是返回保存的地址
int flag_cv=0;
int flag_ch=0;
void getCameraValue(xmlDocPtr doc,xmlNode *rootNode , char* cameraName, xmlChar *cv,xmlChar *ch){
xmlNode *curNode;
xmlChar *v;
for(curNode=rootNode; curNode!=NULL; curNode=curNode->next)
{
if(curNode->type==XML_ELEMENT_NODE)
{
//printf("node name:%s \n",curNode->name);
xmlAttr *attr=curNode->properties;//首个节点或NULL
while(attr!=NULL)
{
v=xmlGetProp(curNode,attr->name);//获取属性内容
//printf("\tattr(%s)=%s \n",attr->name,v);
if(flag_cv && !strcmp("flipping",curNode->name) && !strcmp("value_v",attr->name) )
{
flag_cv=0;
//printf("\tattr(%s)=%s \n",attr->name,v);
strncpy(cv, v, strlen(v) + 1);
}
if(flag_ch && !strcmp("flipping",curNode->name) && !strcmp("value",attr->name) )
{
flag_ch=0;
//printf("\tattr(%s)=%s \n",attr->name,v);
strncpy(ch, v, strlen(v) + 1);
}
if(!strcmp(cameraName,v))
{
flag_cv=1;
flag_ch=1;
}
xmlFree(v);
attr=attr->next;
}
}
getCameraValue(doc,curNode->children,cameraName,cv,ch);
}
}
xml代码
<CameraSettings>
<Profiles cameraId="0" name="123">
<flipping value="H" value_v="V"/>
</Profiles>
<Profiles cameraId="0" name="456">
<flipping value="H" value_v="V"/>
</Profiles>
</CameraSettings>
最后ch读出的是H,cv都出来是V
首先引用头文件:
#include <libxml/parser.h>
//doc是xml路径
//rootNode是叶子节点
//cameraName是xml中的Profiles的name
//cv和ch指针是返回保存的地址
int flag_cv=0;
int flag_ch=0;
void getCameraValue(xmlDocPtr doc,xmlNode *rootNode , char* cameraName, xmlChar *cv,xmlChar *ch){
xmlNode *curNode;
xmlChar *v;
for(curNode=rootNode; curNode!=NULL; curNode=curNode->next)
{
if(curNode->type==XML_ELEMENT_NODE)
{
//printf("node name:%s \n",curNode->name);
xmlAttr *attr=curNode->properties;//首个节点或NULL
while(attr!=NULL)
{
v=xmlGetProp(curNode,attr->name);//获取属性内容
//printf("\tattr(%s)=%s \n",attr->name,v);
if(flag_cv && !strcmp("flipping",curNode->name) && !strcmp("value_v",attr->name) )
{
flag_cv=0;
//printf("\tattr(%s)=%s \n",attr->name,v);
strncpy(cv, v, strlen(v) + 1);
}
if(flag_ch && !strcmp("flipping",curNode->name) && !strcmp("value",attr->name) )
{
flag_ch=0;
//printf("\tattr(%s)=%s \n",attr->name,v);
strncpy(ch, v, strlen(v) + 1);
}
if(!strcmp(cameraName,v))
{
flag_cv=1;
flag_ch=1;
}
xmlFree(v);
attr=attr->next;
}
}
getCameraValue(doc,curNode->children,cameraName,cv,ch);
}
}
xml代码
<CameraSettings>
<Profiles cameraId="0" name="123">
<flipping value="H" value_v="V"/>
</Profiles>
<Profiles cameraId="0" name="456">
<flipping value="H" value_v="V"/>
</Profiles>
</CameraSettings>
最后ch读出的是H,cv都出来是V
相关文章推荐
- UITableView简述
- squid性能指标查看
- Failed executing 'cmd.exe /X /C ""C:\Program Files\Java\jdk1.6.0_38\jre\..\bin\jarsigner.exe"
- C++中虚析构函数的作用
- GDB 单步调试
- phpMyAdmin安装
- appium简明教程(7)——Desired Capabilities详解
- 关于 wait_event_interruptible() 和 wake_up()的使用
- IOS判断手机型号
- Web容器自动对HTTP请求中参数进行URLDecode处理
- CSS-正方体
- oracle中如何判断一个字符串是否含有汉字
- 慎用异常(Exception)
- 一些有用的外网文章链接
- Linux查看内存大小和插槽
- Activity的生命周期
- 第一讲 什么是机器学习
- Apache Drill 框架探究
- appium简明教程(6)——启动appium及android模拟器
- appium简明教程(5)——appium client方法一览