RSS NewReader / XML File auslesen Tiefe knoten (child)

Code-Schnippsel, oder Tipps und Tricks, die einem beim Programmieren mit Qt helfen können.
Antworten
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

RSS NewReader / XML File auslesen Tiefe knoten (child)

Beitrag von patrik08 »

Einfache knoten im xml file zu lesen ist einfach jedoch .... in der tiefen zu gehen muss man etwas denken....

beispiel feed http://rss.cnn.com/rss/cnn_world.rss


Mit eine einzige funktion hole ich alle parameter....

Code: Alles auswählen

typedef QMap<int, QStringList> RssParams;

/* read a static rss version 1/2 file and return QMap params of link title description */
RssParams ReadRssFile( QString fileplace , int limiter )
{
   RssParams contingent;
   QFile xmlfile( fileplace );
   QString errorStr, obname, inhalt;
   int errorLine, errorColumn, position;
   position = 0 -1;
   QDomDocument doc("RSS"); 
     if(!xmlfile.open( QIODevice::ReadOnly ) ) {
      return contingent;
     } 
     if (!doc.setContent(&xmlfile,true, &errorStr, &errorLine, &errorColumn)) { 
      xmlfile.close(); 
      return contingent;  
     }
    QDomElement root = doc.documentElement();
    QDomElement chanelbase = root.firstChildElement("channel");
    QDomElement child = chanelbase.firstChildElement("item");
        while (!child.isNull()) {
           QString title = child.firstChildElement("title").text();
           QString desc = child.firstChildElement("description").text();
           QString urirss = child.firstChildElement("link").text();
           if (!title.isEmpty() and !desc.isEmpty() and !urirss.isEmpty()) {
               position++;
               if (position < limiter) {
               contingent.insert(position,QStringList() << encodeBase64(urirss) << encodeBase64(title) << encodeBase64(desc));
               }
           }
           child = child.nextSiblingElement("item");
        }
   xmlfile.close(); 
   return contingent;
}

und auslesen der paramenter .....

Code: Alles auswählen

      /* read params */
            /* deklaration */
            int sums;     
            RssParams pollparam;
            QStringList rssreader;

            pollparam = ReadRssFile("file.xml",10);
            sums = pollparam.size();

            rssreader.clear();
            RssParams::Iterator it;
              for ( it = pollparam.begin(); it != pollparam.end(); ++it ) { 
                QStringList dx = it.value(); 
                QString ruri = decodeBase64(QString(dx.at(0)));
                QString rtit = Replas(decodeBase64(QString(dx.at(1))));
                QString rdes = Replas(decodeBase64(QString(dx.at(2))));
                QString preline = QString("Des-> %1\n").arg(rdes);
                QString rspiline = QString( "NR.xx Uri-> %1\nTit-> %2\n%3" ).arg( ruri , rtit , rdes );
                rssreader.append(rspiline);
               }
            QString LineALL = rssreader.join("\n");

Ich codiere den Inhalt zu Base64 damit ich in der datenbank keine quote problemen habe ....

Code: Alles auswählen

/* encode to name */
QString encodeBase64( QString xml )
{
    QByteArray text;
    text.append(xml);
    return text.toBase64();
}

/* decode to name */
QString decodeBase64( QString xml )
{
    QByteArray xcode("");;
    xcode.append(xml);
    QByteArray precode(QByteArray::fromBase64(xcode));
    QString notetxt = precode.data();
    return notetxt;
}
IMO : Replas( string ) ist nur eine suche & ersetzen funktion (Zensur!) kann man weglassen oder neu schreiben...



Falls jemand es noch einfacher machen kann .... bin fuer jedes komment dankbar....
.........................
speack português italiano deutsch english castellà qt
Antworten