Hallo Leute,
So sieht meine Xml-Datei aus
<wurzel>
<person>Hans</person>
</wurzel>
<wurzel>
<person>Schäfer</person>
</wurzel>
Eine Xml-Datei muß nur einen Wurzel haben leider die Xml-Dateien, die
ich bearbeite muß sind sehr groß(über 350MB)und haben keinen eindeutig Wurzel. Aus diesem habe ich mich diesen Algorithmus überlegen.
QFile file = new file("/../xmlbeispiel.xml");
QXmlStreamReader xml;
QByteArray anfang("<xmlFile>"), ende("</xmlFile>");
xml.addData(anfang);
//Mit dieser Methode kann ich die Xml-Dateien lesen aber es dauer ewig
//außerdem sie ist nicht flexibel, da ich die Größe der Dateien schon //fest muss. Welche alternativ gibts dann an dieser Stelle.
xml.addData(file->read(350000000));
xml.addData(ende);
while (!xml.atEnd() && !xml.hasError()){
------------------------
}
Hat jemand einen effiktiv algorithmus oder meinen verbessern?
Danke
Xml-Datei lesen
Sorry, hatte ich überlesen, mein Fehler.
Vielleicht hilft Dir ja folgender Codeausschnitt:
LG NoRulez
Vielleicht hilft Dir ja folgender Codeausschnitt:
Code: Alles auswählen
QXmlStreamReader m_xml;
QString m_currentTag;
QString m_linkString;
QString m_descriptionString;
QString m_titleString;
int m_items;
int m_maxItems;
Code: Alles auswählen
while (!m_xml.atEnd()) {
m_xml.readNext();
if (m_xml.isStartElement()) {
if (m_xml.name() == "item") {
m_titleString.clear();
m_descriptionString.clear();
m_linkString.clear();
}
m_currentTag = m_xml.name().toString();
} else if (m_xml.isEndElement()) {
if (m_xml.name() == "item") {
m_items++;
if (m_items > m_maxItems)
return;
emit newsItemReady(m_titleString, m_descriptionString, m_linkString);
}
} else if (m_xml.isCharacters() && !m_xml.isWhitespace()) {
if (m_currentTag == "title")
m_titleString += m_xml.text().toString();
else if (m_currentTag == "description")
m_descriptionString += m_xml.text().toString();
else if (m_currentTag == "link")
m_linkString += m_xml.text().toString();
}
}
if (m_xml.error() && m_xml.error() != QXmlStreamReader::PrematureEndOfDocumentError) {
qWarning() << "XML ERROR:" << m_xml.lineNumber() << ": " << m_xml.errorString();
m_http.abort();
}