从xml文件中提取字符串并将其粘贴到文本文件中

时间:2010-10-16 19:16:56

标签: c xml string

我正在尝试从xml文件中提取数据,删除xml标记,并使用C将值存储在txt文件(制表符分隔格式)中。我能够提取和操作字符串但我无法以制表符分隔格式将字符串粘贴到txt文件。而不是获取应该读取的txt文件:

x.xxxxxxx        x.xxxxxxxx    x.xxxxxxxx

我得到一个类似

的文件
x.xxxxxxx

      x.xxxxxxx
      x.xxxxxxx

我认为这是因为我操作字符串从x.xxxxxxx格式到x.xxxxxxx格式的方式。作为初学者,我不完全确定如何解决这个问题。我该怎么做才能解决它?

提前致谢。

#include <string.h>
#include <stdio.h>
#include <stddef.h>

#define MAX 10000

int main (int argc, char *argv[]){
    FILE *fp;
    char str[MAX];
    char *c[MAX];

    char *xcoor[MAX];
    char *ycoor[MAX];
    char *zcoor[MAX];
    char *z;
    int i =0;

    if((fp = fopen("550.txt", "r"))==NULL){
        printf("Cannot open file.\n");
        exit(1);
    }

    while(!feof(fp)) {
        while(fgets(str, sizeof str, fp)) {
            *(c+i)=strdup(str);
            i++;
        }
    }
    fclose(fp);
    int a = 0;

    for(i=5;i<1700;i=i+17){
        xcoor[a]=c[i];
        a++;
    }

    int b = 0;
    for(i=6;i<1700;i=i+17){
        ycoor[b]=c[i];
        b++;
    }

    char letterx = 'x';
    char lettery = 'y';
    char arrow1 = '<';
    char arrow2 = '>';
    char slash = '/';

    for (i=0;i<100;i++){
        z = *(xcoor+i);
        int g = 0;
        for(g;g<strlen(z);g++){
            if(z[g] == letterx)
            strcpy(z+g, z+g+1);
        }
        *(xcoor+i)=z;        
    }

    for (i=0;i<100;i++){
        z = *(xcoor+i);
        int g = 0;
        for(g;g<strlen(z);g++){
            if(z[g] == arrow1)
            strcpy(z+g, z+g+1);
        }
        *(xcoor+i)=z;    
    }

    for (i=0;i<100;i++){
        z = *(xcoor+i);
        int g = 0;
        for(g;g<strlen(z);g++){
            if(z[g] == arrow2)
            strcpy(z+g, z+g+1);
        }
        *(xcoor+i)=z;        
    }

    for (i=0;i<100;i++){
        z = *(xcoor+i);
        int g = 0;
        for(g;g<strlen(z);g++){
            if(z[g] == slash)
            strcpy(z+g, z+g+1);
         }
        *(xcoor+i)=z; 
    }

    for (i=0;i<100;i++){
        z = *(ycoor+i);
        int g = 0;
        for(g;g<strlen(z);g++){
            if(z[g] == lettery)
                strcpy(z+g, z+g+1);
        }
        *(ycoor+i)=z;        
    }

    for (i=0;i<100;i++){
        z = *(ycoor+i);
        int g = 0;
        for(g;g<strlen(z);g++){
            if(z[g] == arrow1)
                strcpy(z+g, z+g+1);
        }
        *(ycoor+i)=z;    
    }

    for (i=0;i<100;i++){
        z = *(ycoor+i);
        int g = 0;
         for(g;g<strlen(z);g++){
            if(z[g] == arrow2)
                strcpy(z+g, z+g+1);
        }
        *(ycoor+i)=z;        
    }

    for (i=0;i<100;i++){
        z = *(ycoor+i);
        int g = 0;
        for(g;g<strlen(z);g++){
            if(z[g] == slash)
                strcpy(z+g, z+g+1);
        }
        *(ycoor+i)=z;        
    }

    FILE *agentfile;
    agentfile = fopen("name.txt", "w");
    for(i=0;i<100;i++){
        fprintf(agentfile, "%s    %s", *(xcoor+i),    *(ycoor+i));
    }
    fclose(agentfile);
    printf("I'm happy that the program ended fine");

    return 0;
}

2 个答案:

答案 0 :(得分:0)

您只是过滤标签,而不是额外的换行符,回车。你的逻辑问题。

以下是您可以执行的操作:获取仅位于标记内的数据,忽略外部的任何内容。

答案 1 :(得分:0)

fgets返回大多数'\ n',你必须删除它:

while(!feof(fp)) {
    while(fgets(str, sizeof str, fp)) {
        *(c+i)=strdup(str);
        i++;
    }
}

更好:

while( fgets(str, sizeof str, fp) ) {
  if( strchr(str,'\n') )
     *strchr(str,'\n')=0;
  *(c+i)=strdup(str);
  i++;
}

strdup不是ANSI C。