Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.12 KB | None | 0 0
  1. void parseDoc(avl_tree_t *artigos,avl_tree_t_contribuidor *contribuidores, char *docname) {
  2.     xmlDocPtr doc;
  3.     xmlNodePtr cur;
  4.    
  5.  
  6.     char* titulo;
  7.     char* username;
  8.     char* data;
  9.     char* texto;   
  10.  
  11.     doc = xmlParseFile(docname);
  12.    
  13.     if (doc == NULL ) {
  14.         perror("Documento nao fez o parse correto");
  15.         return;
  16.     }
  17.    
  18.     cur = xmlDocGetRootElement(doc);
  19.    
  20.     if (cur == NULL) {
  21.         perror("Documento Vazio");
  22.         xmlFreeDoc(doc);
  23.         return;
  24.     }
  25.    
  26.     if (xmlStrcmp(cur->name, (const xmlChar *) "mediawiki")) {
  27.         perror("Documento do tipo errado");
  28.         xmlFreeDoc(doc);
  29.         return;
  30.     }
  31.    
  32.     cur = cur->xmlChildrenNode;
  33.    
  34.     while (cur != NULL) {
  35.        
  36.         if ((!xmlStrcmp(cur->name, (const xmlChar *)"page"))){
  37.            
  38.             char* title = parseSecondLevel(doc,cur,"title");
  39.             titulo = malloc((strlen(title)+1)*sizeof(char));
  40.             strcpy(titulo, title);
  41.  
  42.             long idT = atol(parseSecondLevel(doc,cur,"id"));
  43.            
  44.             long idR = atof(parseThirdLevel(doc,cur,"revision","id"));
  45.            
  46.             char* timeStamp = parseThirdLevel(doc,cur,"revision","timestamp");
  47.            
  48.             data = malloc((strlen(timeStamp)+1)*sizeof(char));
  49.             strcpy(data,timeStamp);
  50.        
  51.             long idU = atof(parseFourthLevel(doc,cur,"revision","contributor","id"));
  52.            
  53.             char* user = parseFourthLevel(doc,cur,"revision","contributor","username");
  54.             username = malloc((strlen(user)+1)*sizeof(char));
  55.             strcpy(username,user);
  56.  
  57.             char* text = parseThirdLevel(doc,cur,"revision","text");
  58.             texto = malloc((strlen(text)+1)*sizeof(char));
  59.             strcpy(texto,text);
  60.  
  61.  
  62.             long conta[2];
  63.             palavras_and_length(texto,conta);
  64.            
  65.             avl_insert(artigos,titulo,idT,conta[0],conta[1],idR,data);
  66.  
  67.             if((strcmp(username,"-1")!= 0) && (idU != (-1))){  
  68.                 avl_insert_contribuidor(contribuidores, username, idU);
  69.  
  70.             }
  71.             free(titulo);
  72.             free(texto);   
  73.             free(data);
  74.             free(username);
  75.            
  76.         }
  77.     cur = cur->next;
  78.     }
  79.  
  80.     xmlFreeDoc(doc);
  81. }
  82.  
  83.  
  84.  
  85. void palavras_and_length(char* text,long* conta){
  86.     long palavras = 0;
  87.     long i;
  88.  
  89.     for(i = 0; text[i] ; ++i){ 
  90.         if(isspace(text[i]) == 0 && (isspace(text[i+1]) > 0 || text[i+1] == '\0'))
  91.             ++palavras;
  92.     }
  93.     conta[0] = i;
  94.     conta[1] = palavras;   
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement