xml手动编辑后linux解析出错,linux编译一个xml应用的时候,总是Segmentation fault

#include

#include

#include

#include

#include

#include

#include

#include

#include

static void Useage(void)

{

printf("command is not right, please try agin\n");

printf("Useage: ./xml_prog_tool \n");

}

/* how to compile this xml resolver? useing command:

*arm-none-linux-gnueabi-gcc -o tool_xml tool_xml.c -lxml2 -I /usr/include/libxml2  -L -lz -lm

*/

static int xml_parse(char *szDocName)

{

xmlDocPtr doc;           //定义解析文档指针

xmlNodePtr curNode;      //定义结点指针(你需要它为了在各个结点间移动)xmlNodePtr

xmlChar *szKey;          //临时字符串变量

xmlNodePtr propNodePtr;

doc = xmlReadFile(szDocName,  "UTF-8",        XML_PARSE_RECOVER); //以GB2312的编码方式读入解析文件

//检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。

//一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。

//如果文档是这样,libxml将自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中.

if (NULL == doc)

{

fprintf(stderr,"xxx.xml is not parsed successfully. \n");

return -1;

}

curNode = xmlDocGetRootElement(doc); //确定文档根元素

/*检查确认当前文档中包含内容*/

if(NULL == curNode)

{

fprintf(stderr,"the document is empty.\n");

xmlFreeDoc(doc);

return -1;

}

/* 我们需要确认文档是正确的类型。“PROG”是在这个烧写中使用文档的根类型。*/

if (xmlStrcmp(curNode->name,  BAD_CAST  "PROG"))

{

fprintf(stderr,"document of the wrong type, root_node is not PROG\n");

xmlFreeDoc(doc);

return -1;

}

curNode = curNode->xmlChildrenNode;     // curNode目前等于根目录的第一个子目录

propNodePtr = curNode;                                        // 由于空格,现在这个节点是名为text的节点

while(curNode != NULL)

{

if(xmlStrcmp(curNode->name,(const xmlChar *)"text"))

{

//get_file_information(curNode);

//printf("%s\n", curNode->name);

//printf("get_file_information()\n");

}

curNode = curNode->next;

}

xmlFreeDoc(doc);

xmlCleanupParser();

return 0;

}

int main(int argc, char* argv[])

{

char *szDocName;

int ret,retval = 0;

int val, flag = 0;

int i;

if (argc <= 1)

{

Useage();

return  -1;

}

/* 1. parse xml */

szDocName = argv[1];

ret = xml_parse(szDocName);   // 解析xml文件,并把结果保存到全局结构体中

if(ret)

{

printf("parse xml file failed!!!\n");

return -1;

}

return retval;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值