|
原来有xml读取功能,是可以编译通过的
我把里面跟具体应用有关的删除了,只留下解析部分,这个时候也是可以编译通过的
但是我在里面只要加上代码,就莫名其妙的出现 段错误,甚至printf都不行,反反复复试了很多次,除了从原来代码删,不加任何东西,只要加就会出错
删后代码如下:
- #include <stdio.h>
- #include <libxml/parser.h>
- #include <libxml/tree.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <sys/wait.h>
- static void Useage(void)
- {
- printf("command is not right, please try agin\n");
- printf("Useage: ./xml_prog_tool <xxx.xml>\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;
- }
复制代码
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|