免费注册 查看新帖 |

Chinaunix

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

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

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


#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;
}

论坛徽章:
0
2 [报告]
发表于 2004-07-07 10:08 |只看该作者

用C解析xml然后存入postgresql数据库的程序,帮忙看一下

我C很菜帮不了你:(

论坛徽章:
0
3 [报告]
发表于 2004-07-26 14:07 |只看该作者

用C解析xml然后存入postgresql数据库的程序,帮忙看一下

倒一下试试看

PQclear(res);
PQfinish(conn);

论坛徽章:
0
4 [报告]
发表于 2004-07-29 13:56 |只看该作者

用C解析xml然后存入postgresql数据库的程序,帮忙看一下

你这段根本不需要这个,PQclear(res);

论坛徽章:
0
5 [报告]
发表于 2004-08-01 15:44 |只看该作者

用C解析xml然后存入postgresql数据库的程序,帮忙看一下

看不懂,偶只会用esql-c.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP