File indexing completed on 2024-05-19 04:48:27
0001 #include "htmlparser.h" 0002 0003 htmlParser::htmlParser(QObject *parent) 0004 : QObject(parent) 0005 { 0006 } 0007 0008 void htmlParser::setHtml(const QByteArray &array) 0009 { 0010 this->html = array; 0011 } 0012 0013 QString htmlParser::extractProp(const QString &tag, const QString &prop) 0014 { 0015 // qDebug()<<"extractProp"<<tag; 0016 auto list = tag.split(" "); 0017 auto result = list.filter(prop, Qt::CaseInsensitive); 0018 // qDebug()<<result; 0019 auto url = result.first().replace(prop, "").replace('\"', ""); 0020 // qDebug()<<url; 0021 return url; 0022 } 0023 0024 QStringList htmlParser::parseTag(const QString &tagRef, const QString &attribute) 0025 { 0026 QStringList results; 0027 QStringList html(QString(this->html).split(">")); 0028 0029 for (auto i = 0; i < html.size(); i++) { 0030 QString tag = html.at(i); 0031 tag += ">"; 0032 0033 if (findTag(tag, "<" + tagRef + ">") && tag.contains(attribute)) { 0034 QString subResult; 0035 // qDebug()<<subResult; 0036 while (!html.at(i).contains("</" + tagRef)) { 0037 auto subTag = html.at(i); 0038 subTag += ">"; 0039 subResult += subTag; 0040 i++; 0041 if (i > html.size()) 0042 break; 0043 } 0044 0045 results << subResult.simplified(); 0046 qDebug() << subResult; 0047 } 0048 } 0049 0050 return results; 0051 } 0052 0053 /*QStringList htmlParser::parseTag_old(const QString &tagRef) 0054 { 0055 QString html(this->html); 0056 QStringList tags; 0057 int i =0; 0058 while(html.size()>i) 0059 { 0060 if(html.at(i)=="<") 0061 { 0062 QString tag; 0063 0064 while(html.at(i)!=">") 0065 { 0066 tag+=html.at(i); 0067 i++; 0068 if(i>html.size()) break; 0069 } 0070 tag+=">"; 0071 0072 0073 if(findTag(tag,tagRef)) 0074 { 0075 tags<<tag; 0076 qDebug()<<tag; 0077 } 0078 0079 } 0080 0081 i++; 0082 if(i>html.size()) break; 0083 } 0084 0085 return tags; 0086 }*/ 0087 0088 bool htmlParser::findTag(const QString &txt, const QString &tagRef) 0089 { 0090 // qDebug()<<"size of tag<<"<<txt.size(); 0091 int i = 0; 0092 QString subTag; 0093 while (i < txt.size()) { 0094 if (txt.at(i).toLatin1() == '<') { 0095 while (!txt.at(i).isSpace() && txt.at(i).toLatin1() != '>') { 0096 subTag += txt.at(i); 0097 i++; 0098 if (i > txt.size()) 0099 break; 0100 } 0101 subTag += ">"; 0102 } 0103 0104 i++; 0105 if (i > txt.size()) 0106 break; 0107 } 0108 0109 if (tagRef == subTag) 0110 return true; 0111 else 0112 return false; 0113 }