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 }