bool PdmlFileFormat::isMyFileFormat(const QString fileName) { bool ret = false; QFile file(fileName); QByteArray buf; QXmlStreamReader xml; if (!file.open(QIODevice::ReadOnly)) goto _exit; xml.setDevice(&file); xml.readNext(); if (xml.hasError() || !xml.isStartDocument()) goto _close_exit; // skip everything until the start of the first element while (!xml.isStartElement()) { xml.readNext(); if (xml.hasError()) goto _close_exit; } if (!xml.hasError() && xml.isStartElement() && (xml.name() == "pdml")) ret = true; else ret = false; _close_exit: xml.clear(); file.close(); _exit: return ret; }
TableEditFieldDescriptors TableEditFieldDescriptors::readXml(QXmlStreamReader& reader) { TableEditFieldDescriptors descriptors; bool foundMainTag = false; while (!reader.atEnd()) { if (reader.isStartElement()) { if (reader.name().compare("FieldViewDescriptors", Qt::CaseInsensitive) == 0) { if (reader.attributes().hasAttribute("name")) descriptors.setName(reader.attributes().value("name").toString()); if (foundMainTag) { // Found the main tag a second time! break; } foundMainTag = true; reader.readNext(); } else if (reader.name().compare("FieldViewDescriptor", Qt::CaseInsensitive) == 0) { TableEditFieldDescriptor x = TableEditFieldDescriptor::readXml(reader); descriptors.append(x); } else { // Unexpected element, so obviously we are finished with the Field! // qDebug(qPrintable(QString("Found unexpected XML element '%1' in field '%2'").arg(reader.name().toString()).arg(field.getName()))); break; } } else if (reader.isStartDocument()) { reader.readNext(); } else if (reader.isEndElement()) { //qDebug(qPrintable(QString("End element with name '%1' in field '%2'").arg(reader.name().toString()).arg(field.getName()))); if (foundMainTag && reader.name().compare("FieldViewDescriptors", Qt::CaseInsensitive) == 0) { reader.readNext(); break; } reader.readNext(); } else { reader.readNext(); } } return descriptors; }
void FileReader::parseFile(QString &filename, FileRecord &record) { QFileInfo f(filename); QFile file(filename); QByteArray data; QXmlStreamReader reader; if (f.suffix() == "fb2") { if (!file.open(QFile::ReadOnly | QFile::Text)) { return; } reader.setDevice(&file); } else if (f.suffix() == "zip") { int res = unzipFile(filename, data); if (0 != res) { return; } reader.addData(data); } reader.readNext(); if (reader.isStartDocument()) { record.setEncoding(reader.documentEncoding().toString()); } if (reader.readNextStartElement()) { if (reader.name() == "FictionBook") { if (reader.readNextStartElement()) { if (reader.name() == "description") { if (reader.readNextStartElement()) { if (reader.name() == "title-info") { while (reader.readNextStartElement()) { if (reader.name() == "genre") { QString genre = reader.readElementText(); if (reader.attributes().hasAttribute("match")) { int match = reader.attributes().value("match").toInt(); record.addGenre(genre, match); } else record.addGenre(genre); } else if (reader.name() == "author") { Person *tmpAuthor = new Person(); while (reader.readNextStartElement()) { if (reader.name() == "first-name") { tmpAuthor->setFirstName(reader.readElementText()); } if (reader.name() == "middle-name") { tmpAuthor->setMiddleName(reader.readElementText()); } if (reader.name() == "last-name") { tmpAuthor->setLastName(reader.readElementText()); } if (reader.name() == "nickname") { tmpAuthor->setNickname(reader.readElementText()); } if (reader.name() == "home-page") { tmpAuthor->addHomePage(reader.readElementText()); } if (reader.name() == "email") { tmpAuthor->addEmail(reader.readElementText()); } if (reader.name() == "id") { tmpAuthor->setId(reader.readElementText()); } } record.addAuthor(*tmpAuthor); delete tmpAuthor; } else if (reader.name() == "book-title") { record.setBookTitle(reader.readElementText()); } else if (reader.name() == "sequence") { if (reader.attributes().hasAttribute("name")) { QString sequence = reader.attributes().value("name").toString(); if (reader.attributes().hasAttribute("number")) { int number = reader.attributes().value("number").toInt(); record.addSequence(sequence, number); } else record.addSequence(sequence); } } else reader.skipCurrentElement(); } } } } } } } file.close(); }
bool TagIO::read_xml( QIODevice* in, const QString& relative_dir, QHash< QString, QList<TagItem::Elements> >& elts ) { if( !in ) { return false; } QDir dir; if( !relative_dir.isEmpty() ) { dir = QDir( relative_dir ).absolutePath(); } QXmlStreamReader xml; xml.setDevice( in ); if( xml.readNext() == QXmlStreamReader::StartDocument && !xml.isStartDocument() ) { return false; } if( !xml.readNextStartElement() ) { return false; } if( xml.name() != DATASET ) { return false; } // skip info for user while( xml.readNextStartElement() && ( xml.name() != IMAGES && xml.name() != TAGS ) ) { xml.skipCurrentElement(); } QHash<QString, QColor> tag_color_dict; if( xml.name() == TAGS ) { while( xml.readNextStartElement() && xml.name() == SINGLE_TAG ) { tag_color_dict[ xml.attributes().value( NAME ).toString() ] = QColor( xml.attributes().value( COLOR ).toString() ); // empty elements are directly followed by endElement // so readNext must be called xml.readNextStartElement(); } } // within the "images" element while( !xml.atEnd() ) { if( xml.name() == SINGLE_IMAGE ) { QString fullpath = xml.attributes().value( PATH ).toString(); if( fullpath.isEmpty() ) { xml.skipCurrentElement(); continue; } if( !relative_dir.isEmpty() && dir.exists() ) { fullpath = dir.absoluteFilePath( fullpath ); } if( !xml.readNextStartElement() ) { xml.skipCurrentElement(); continue; } while( xml.name() == BOX ) { QXmlStreamAttributes att = xml.attributes(); QStringRef top = att.value( TOP ); QStringRef left = att.value( LEFT ); QStringRef width = att.value( WIDTH ); QStringRef height = att.value( HEIGHT ); bool skip = ( top.isEmpty() || left.isEmpty() || width.isEmpty() || height.isEmpty() ); xml.readNextStartElement(); skip = skip || ( xml.name() != LABEL ); QString label = xml.readElementText(); skip = skip || ( label.isEmpty() ); if( skip ) { xml.skipCurrentElement(); xml.readNextStartElement(); continue; } TagItem::Elements elt; elt._fullpath = fullpath; elt._label = label; elt._color = tag_color_dict.value( label ); elt._bbox.append( QRect( left.toInt(), top.toInt(), width.toInt(), height.toInt() ) ); elts[ fullpath ].append( elt ); xml.readNextStartElement(); while( xml.isEndElement() ) { xml.readNextStartElement(); } } } else { xml.readNextStartElement(); } } return true; }