RSS NewReader / XML File auslesen Tiefe knoten (child)
Verfasst: 18. August 2006 16:26
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....
und auslesen der paramenter .....
Ich codiere den Inhalt zu Base64 damit ich in der datenbank keine quote problemen habe ....
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....
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;
}Falls jemand es noch einfacher machen kann .... bin fuer jedes komment dankbar....