有用过LIBXML2的吗?

发布于 2022-09-29 17:47:25 字数 3403 浏览 6 评论 0

我使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文