有用过LIBXML2的吗?
我使用LIBXML2写了个解析XML文件并生成新的XML文件的程序,在电脑上运行良好,但是下到我的ARM板子里运行提示说有段错误,并显示出来一堆寄存器的值,不知道是哪的问题,程序如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
int creatDoc(xmlChar *key)
{
xmlDocPtr doc =NULL;
xmlNodePtr root_node=NULL,node=NULL,node1=NULL;
//creat a new document, a node and set it as a root node
doc=xmlNewDoc(BAD_CAST"1.0");
root_node=xmlNewNode(NULL,BAD_CAST"root");
xmlDocSetRootElement(doc,root_node);
//creats a new node,which is"attached"as a child node of root_node node
xmlNewChild(root_node,NULL,BAD_CAST"node",BAD_CAST"content of node1");
node=xmlNewChild(root_node,NULL,BAD_CAST"node3",BAD_CAST key);
//xmlNewProp(node,BAD_CAST"attribute",BAD_CAST"yes");
//here goes another way to creat node
node=xmlNewNode(NULL,BAD_CAST"node4");
node1=xmlNewText(BAD_CAST"other way to creat content");
xmlAddChild(node,node1);
xmlAddChild(root_node,node);
printf("3333333333333333333333");
//dumping document to stdio or file
xmlSaveFormatFile("newnode.html",doc,1);
//free the document
xmlFreeDoc(doc);
xmlCleanupParser();
xmlMemoryDump(); //debug memory for regression tests
return 0;
}
int parseStory(xmlDocPtr doc,xmlNodePtr cur)
{
xmlChar *key;
cur=cur->xmlChildrenNode;
while(cur!=NULL)
{
if((!xmlStrcmp(cur->name,(const xmlChar *)"keyword")))
{
key=xmlNodeListGetString(doc,cur->xmlChildrenNode,1);
printf("keyword:%s\n",key);
creatDoc(key);
xmlFree(key);
}
cur=cur->next;
printf("22222222222222222");
}
return 0;
}
static void parseDoc(char *docname)
{
xmlDocPtr doc;
xmlNodePtr cur;
doc=xmlParseFile(docname);
if(doc==NULL)
{
fprintf(stderr,"Document not parsed succeddful.\n");
return;
}
cur=xmlDocGetRootElement(doc);
if(cur==NULL)
{
fprintf(stderr,"empty document\n");
xmlFreeDoc(doc);
return;
}
if(xmlStrcmp(cur->name,(const xmlChar *)"story"))
{
fprintf(stderr,"document of the wrong type root node!=story");
xmlFreeDoc(doc);
return;
}
cur=cur->xmlChildrenNode;
while(cur!=NULL)
{
if((!xmlStrcmp(cur->name,(const xmlChar *)"storyinfo")))
{
parseStory (doc,cur);
}
cur=cur->next;
printf("11111111111111111");
}
xmlFreeDoc(doc);
return;
}
int main(int argc,char **argv)
{
char *docname;
xmlDocPtr doc;
if(argc<=1)
{
printf("usage:%s docname\n",argv[0]);
return(0);
}
docname=argv[1];
parseDoc(docname);
printf("444444444444444");
return(1);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论