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 }