Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

marcparser.cpp

Go to the documentation of this file.
00001 #include "marcparser.h"
00002  
00003 MARCParser::MARCParser(int recno, QMap<QString, QString> *dict): rec(recno), dict(dict) 
00004 {
00005     authorno=0;
00006 }
00007 
00008 bool MARCParser::startDocument()
00009 {
00010     return TRUE;
00011 }
00012 
00013 bool MARCParser::characters( const QString& c ) {
00014         token=c;
00015         return TRUE;
00016 }
00017 
00018 bool MARCParser::startElement( const QString&, const QString&,
00019                                     const QString& qname,
00020                                     const QXmlAttributes& a)
00021 {
00022     if(qname=="datafield") datafield=a.value("tag");
00023     if(qname=="subfield") subfield=a.value("code");
00024     return TRUE;
00025 }
00026 
00027 bool MARCParser::endElement( const QString&, const QString&, const QString& qname)
00028 {
00029     if(qname=="subfield") {
00030         key="";
00031         if(datafield=="020" && subfield=="a") key="isbn";
00032         
00033         else if(datafield=="130" && subfield=="l") key="language";
00034         else if(datafield=="150" && subfield=="a") key="edition";
00035         else if(datafield=="245" && subfield=="a") key="title";
00036         else if(datafield=="245" && subfield=="b") key="subtitle";
00037         else if(datafield=="260" && subfield=="a") key="address";
00038         else if(datafield=="260" && subfield=="b") key="publisher";
00039         else if(datafield=="260" && subfield=="c") key="year";
00040         else if(datafield=="440" && subfield=="a") key="journal";
00041         else if(datafield=="440" && subfield=="v") key="volume";
00042         else if(datafield=="520" && subfield=="a") key="memo";
00043         if(!key.isEmpty()) {
00044                 printf("%s => %s datafield=%s\n", (const char*) key,(const char*) token, (const char*) datafield);
00045                 dict->insert(key+"_"+QString().setNum(rec), token);
00046         }
00047         
00048         if( (datafield=="100" && subfield=="a") || (datafield=="700" && subfield=="a") ) { 
00049         
00050         QString firstname;
00051         QString lastname;
00052         token.stripWhiteSpace();
00053         if(token.find(",")!=-1) {
00054             firstname=token.right(token.length()-token.find(",")-1);
00055             lastname=token.left(token.find(","));
00056         } 
00057         else {
00058             lastname=token.right(token.length()-token.findRev(" ")-1);
00059             firstname=token.left(token.findRev(" "));
00060         }
00061             
00062         key="lastname"+QString().setNum(authorno); 
00063         dict->insert(key+"_"+QString().setNum(rec), lastname);      
00064   
00065         key="firstname"+QString().setNum(authorno); 
00066         dict->insert(key+"_"+QString().setNum(rec), firstname);
00067             
00068         authorno++; 
00069         }
00070     }
00071     
00072     return TRUE;
00073 }

Generated on Sat Mar 27 19:20:41 2004 for Literature by doxygen 1.3.6-20040222