bool ParseContext::handleStartElement(QXmlStreamReader &r) { const QStringRef name = r.name(); const Element e = element(name); if (e == VariableElement) { m_currentVariableName = r.readElementText(); return false; } if (!ParseContext::isValueElement(e)) return false; const QXmlStreamAttributes attributes = r.attributes(); const QString key = attributes.hasAttribute(keyAttribute) ? attributes.value(keyAttribute).toString() : QString(); switch (e) { case SimpleValueElement: // This reads away the end element, so, handle end element right here. m_valueStack.push_back(ParseValueStackEntry(readSimpleValue(r, attributes), key)); return handleEndElement(name); case ListValueElement: m_valueStack.push_back(ParseValueStackEntry(QVariant::List, key)); break; case MapValueElement: m_valueStack.push_back(ParseValueStackEntry(QVariant::Map, key)); break; default: break; } return false; }
bool ParseContext::handleStartElement(QXmlStreamReader &r) { const QStringRef name = r.name(); const Element e = element(name); if (e == VariableElement) { m_currentVariableName = r.readElementText(); return false; } if (!ParseContext::isValueElement(e)) return false; const QXmlStreamAttributes attributes = r.attributes(); const QString key = attributes.hasAttribute(keyAttribute) ? attributes.value(keyAttribute).toString() : QString(); switch (e) { case SimpleValueElement: { // This reads away the end element, so, handle end element right here. const QVariant v = readSimpleValue(r, attributes); if (!v.isValid()) { qWarning() << ParseContext::formatWarning(r, QString::fromLatin1("Failed to read element \"%1\".").arg(name.toString())); return false; } m_valueStack.push_back(ParseValueStackEntry(v, key)); return handleEndElement(name); } case ListValueElement: m_valueStack.push_back(ParseValueStackEntry(QVariant::List, key)); break; case MapValueElement: m_valueStack.push_back(ParseValueStackEntry(QVariant::Map, key)); break; default: break; } return false; }