免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2015 | 回复: 0
打印 上一主题 下一主题

用C解析xml然后存入postgresql数据库的程序,帮忙看一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-07-05 08:40 |只看该作者 |倒序浏览
//程序代码1,编译通过,运行的时候错误,运行可以把一个xml文件解析出来,但是执行conndb()时候,老是报"段错误",其实conndb()程序跟程序代码2几乎一样.但是为什么运行在代码1中老是报错????大家能否给我看一下.


#include <stdio.h>;
#include <string.h>;
#include <stdlib.h>;
#include <libxml/xmlmemory.h>;
#include <libxml/parser.h>;

#include "libpq-fe.h"

void
parsePacket (xmlDocPtr doc, xmlNodePtr cur) {
char str[5][50];
xmlChar *key;
int i=0;
cur = cur->;xmlChildrenNode;
while (cur != NULL) {
key = xmlNodeListGetString(doc, cur->;xmlChildrenNode, 1);
if(key!=NULL)
{
printf("%s\n", key);
}
// xmlFree(key);
cur = cur->;next;
}
return;
}

static void
parseDoc(char *docname) {

xmlDocPtr doc;
xmlNodePtr cur;

doc = xmlParseFile(docname);

if (doc == NULL ) {
fprintf(stderr,"Document not parsed successfully. \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 *)"packet")){
parsePacket (doc, cur);
}

cur = cur->;next;
}

xmlFreeDoc(doc);
return;
}

int
main(int argc, char **argv) {

char *docname;

if (argc <= 1) {
printf("Usage: %s docname\n", argv[0]);
return(0);
}

docname = argv[1];
parseDoc (docname);
conndb();
return (1);
}

int conndb()
{
PGconn *conn;
PGresult *res;
char *pghost = NULL;
char *pgport =NULL;
char *pgoptions =NULL;
char *pgtty = NULL;
char *dbname ="test";
int i = 0,t = 0,s,k;
conn = PQsetdb(pghost,pgport,pgoptions,pgtty,dbname);
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr,"Connection to database '%s' failed!\n",dbname);
return 0;
PQfinish(conn);
}
res=PQexec(conn,"insert into test_tbl values('22','22')";
if(PQresultStatus(res)!= PGRES_COMMAND_OK)
{
return 0;
fprintf(stderr,"insert failed";
}

PQfinish(conn);
PQclear(res);
return 1;
}
//------程序代码2.编译通过,运行也没有问题.因此,数据库这边是没有问题的

#include <stdio.h>;
#include <libpq-fe.h>;

int main()
{
PGconn *conn;
PGresult *res;
char *pghost = NULL;
char *pgport =NULL;
char *pgoptions =NULL;
char *pgtty = NULL;
char *dbname ="test";/**数据库名*/
int i = 0,t = 0,s,k;
conn = PQsetdb(pghost,pgport,pgoptions,pgtty,dbname);
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr,"Connection to database '%s' failed!\n",dbname);
PQfinish(conn);
return 0;
}
//res = PQexec(conn,"SELECT * FROM test_tbl";
PQexec(conn,"insert into test_tbl values('11','11')";
PQfinish(conn);
PQclear(res);
return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP