The C VOTable Parser Library.

[Introduction]- [Download]- [Tutorial]- [Reference]

Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

Extract Attributes and values from a VOTABLE element


Functions

void Extract_VO_Fields (xmlTextReaderPtr reader, VOTable *votablePtr, int *nbFields, int **columns)
 Procedure to extract FIELD attribute
PURPOSE : Free field linking list if needed, extracts FIELD attributes from VOTABLE file and stores them in VOTable structure.

int Extract_VO_TableData (xmlTextReaderPtr reader, VOTable *votablePtr, int nbcolumns, int *columns)
 Procedure to extract TD tag attributes and values
PURPOSE : Free tabledata linking list if needed, Extracts TD attributes and values from VOTABLE file and stores them in VOTable structure.

void Extract_Att_VO_Table (xmlTextReaderPtr reader, VOTable *votablePtr)
 Procedure extracting TABLE tag attributes
PURPOSE : Free table linking list if needed, extracts TABLE attributes from VOTABLE file and stores them in VOTable structure.


Detailed Description

Free memory if needed, extract data from VOTABLE file and store them in the _VOTable structure

Function Documentation

void Extract_Att_VO_Table xmlTextReaderPtr  reader,
VOTable votablePtr
 

Procedure extracting TABLE tag attributes
PURPOSE : Free table linking list if needed, extracts TABLE attributes from VOTABLE file and stores them in VOTable structure.

Parameters:
reader Pointer on xmlTextReader
votablePtr Pointer on VOTable structure
Returns:
_VOTable structure filled

Number of records

00169                                                {
00170 
00171   xmlChar *name;
00172   int ret;
00173 
00174   ret = 1;
00175   /* Free memory if needed */
00176   if (votablePtr->table != NULL)
00177     Free_VO_Table(votablePtr->table);
00178   if(reader == NULL) 
00179     ret = xmlTextReaderRead(reader);
00180   while (ret == 1) {
00181     /* Reading file */
00182     name = xmlTextReaderName(reader);
00183      if (name == NULL)
00184         name = xmlStrdup(BAD_CAST "--");
00185      /* Searching TABLE tag */
00186     if (xmlStrcmp(name,"TABLE") == 0 
00187         && xmlTextReaderNodeType(reader) == 1) {
00188       votablePtr->table = insert_table(reader); 
00189       ret = 0;
00190       xmlFree(name);
00191     } else {
00192       ret = xmlTextReaderRead(reader);
00193       if (name!=NULL)
00194         xmlFree(name);
00195     }
00196   }
00197 }

void Extract_VO_Fields xmlTextReaderPtr  reader,
VOTable votablePtr,
int *  nbFields,
int **  columns
 

Procedure to extract FIELD attribute
PURPOSE : Free field linking list if needed, extracts FIELD attributes from VOTABLE file and stores them in VOTable structure.

Parameters:
reader Pointer on xmlTextReader
votablePtr Pointer on VOTable structure
nbFields FIELD tag occurence embedded in one TABLE element
columns Array representing the columns position to extract in TABLEDATA
Returns:
_VOTable structure filled
Field tag occurence in one TABLE tag
Array allocated to nbFields size and zero initialized

00204                                         {
00205 
00206   int ret;
00207   int position;
00208   int i;
00209   xmlChar *name;
00210   
00211   /* Free memory if needed */
00212   if (votablePtr->field != NULL) {
00213     Free_VO_Fields(votablePtr->field,columns);
00214     votablePtr->field = NULL;
00215   }
00216 
00217   /* Init variable */
00218   position = 0;
00219   ret = 1;
00220 
00221   /* Reading file */
00222   if(reader == NULL)
00223     ret = xmlTextReaderRead(reader);
00224   while (ret == 1) {
00225     name = xmlTextReaderName(reader);    
00226     if (name == NULL)
00227       name = xmlStrdup(BAD_CAST "--");
00228     /* Searching FIELD tag */
00229     if (xmlStrcmp(name,"FIELD") == 0 
00230         && xmlTextReaderNodeType(reader) == 1) {
00231       /* Number of FIELD met */
00232       position++;
00233       /* Insert in the linking list the attribute values of the element */
00234       votablePtr->field = insert_field(reader,votablePtr->field,position);
00235       /* go on reading */
00236       ret = xmlTextReaderRead(reader);
00237       xmlFree(name);
00238     }
00239     else if(xmlStrcmp(name,"DATA") == 0 
00240             && xmlTextReaderNodeType(reader) == 1) {
00241       ret = 0; 
00242       xmlFree(name);
00243     }
00244     else {
00245       ret = xmlTextReaderRead(reader);
00246       if (name != NULL)
00247         xmlFree(name);
00248     }
00249   }
00250 
00251   /* Memory allocation for columns in order to avoid to user to do that*/
00252   QMALLOC(*columns,int,position);
00253   /* Field tag number found */
00254   *nbFields = position;
00255   /* Initialization of columns */ 
00256   for(i=0;i<position;i++) 
00257     (*columns)[i] = 0;
00258 }

int Extract_VO_TableData xmlTextReaderPtr  reader,
VOTable votablePtr,
int  nbcolumns,
int *  columns
 

Procedure to extract TD tag attributes and values
PURPOSE : Free tabledata linking list if needed, Extracts TD attributes and values from VOTABLE file and stores them in VOTable structure.

Parameters:
reader Pointer on xmlTextReader
votablePtr Pointer on VOTable structure
nbcolumns Field tag occurence embedded in one TABLE element
columns Array representing the columns position to extract in TABLEDATA tag
Returns:
_VOTable structure filled

Number of records

00265                                         {
00266 
00267   xmlChar *name;
00268   int column_number;
00269   int ret,cnt,nblines;
00270   int *pinit;
00271 
00272   nblines = 0;
00273   /* Free memory if needed */
00274   if (votablePtr->tabledata != NULL)
00275     Free_VO_Tabledata(votablePtr->tabledata);
00276   /* Initialization */
00277   ret = 1;
00278   column_number = 0;
00279   pinit = columns;
00280   if(reader == NULL)
00281     ret = xmlTextReaderRead(reader);
00282   while (ret == 1) {
00283     name = xmlTextReaderName(reader);
00284     if (name == NULL)
00285       name = xmlStrdup(BAD_CAST "--");
00286     /* Search TD node*/
00287     if (xmlStrcmp(name,"TD") == 0 
00288         && xmlTextReaderNodeType(reader) == 1) {
00289       /* Retrieve TD tag value */
00290       ret = xmlTextReaderRead(reader);
00291       xmlFree(name);
00292       column_number++;
00293       /* retrieve all data for columns selected */
00294       for(cnt=0;cnt<nbcolumns;cnt++) 
00295         if (columns[cnt] == column_number)
00296           votablePtr->tabledata = insert_tabledata(reader,votablePtr->tabledata,column_number);
00297       
00298       columns = pinit;
00299       /* Start a TR tag */
00300       if (column_number == nbcolumns) {
00301         column_number = 0;
00302         nblines++;
00303       }
00304     } else if(xmlStrcmp(name,"TABLEDATA") == 0 
00305               && xmlTextReaderNodeType(reader) == 15) {
00306         ret = 0;
00307         xmlFree(name);
00308     }
00309     else {
00310       ret = xmlTextReaderRead(reader);
00311       if (name != NULL)
00312         xmlFree(name);
00313     }
00314   }
00315   return(nblines);
00316 }