您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: