bool QGeoCodeParser::parseRootElement() { if (m_reader->readNextStartElement()) { if (m_reader->name() == "searchresults") { while (m_reader->readNextStartElement()) { if (m_reader->name().toString() == "place") { QGeoPlace place; if (!parsePlace(&place)) return false; m_results.append(place); } else { m_reader->raiseError(QString("The element \"searchresults\" did not expect a child element named \"%1\".").arg(m_reader->name().toString())); return false; } } } else if (m_reader->name() == "reversegeocode") { while (m_reader->readNextStartElement()) { if (m_reader->name().toString() == "addressparts") { QGeoPlace place; if (!parsePlace(&place)) return false; m_results.append(place); } else if (m_reader->name().toString() == "result") { m_reader->skipCurrentElement(); } else { m_reader->raiseError(QString("The element \"reversegeocode\" did not expect a child element named \"%1\".").arg(m_reader->name().toString())); return false; } } } else { m_reader->raiseError("The place not found, request needs more attributes or there is error in request."); return false; } } return true; }
bool QGeoCodeXmlParser::parseRootElement() { /* <xsd:element name="places"> <xsd:complexType> <xsd:sequence> <xsd:element minOccurs="0" maxOccurs="unbounded" name="place" type="gc:Place"/> </xsd:sequence> <xsd:attribute name="resultCode" type="gc:ResultCodes"/> <xsd:attribute name="resultDescription" type="xsd:string"/> <xsd:attribute name="resultsTotal" type="xsd:nonNegativeInteger"/> </xsd:complexType> </xsd:element> <xsd:simpleType name="ResultCodes"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="OK"/> <xsd:enumeration value="FAILED"/> </xsd:restriction> </xsd:simpleType> */ if (m_reader->readNextStartElement()) { if (m_reader->name() == "places") { if (m_reader->attributes().hasAttribute("resultCode")) { QStringRef result = m_reader->attributes().value("resultCode"); if (result == "FAILED") { QString resultDesc = m_reader->attributes().value("resultDescription").toString(); if (resultDesc.isEmpty()) resultDesc = "The attribute \"resultCode\" of the element \"places\" indicates that the request failed."; m_reader->raiseError(resultDesc); return false; } else if (result != "OK") { m_reader->raiseError(QString("The attribute \"resultCode\" of the element \"places\" has an unknown value (value was %1).").arg(result.toString())); return false; } } while (m_reader->readNextStartElement()) { if (m_reader->name() == "place") { QGeoPlace place; if (!parsePlace(&place)) return false; m_results.append(place); } else { m_reader->raiseError(QString("The element \"places\" did not expect a child element named \"%1\".").arg(m_reader->name().toString())); return false; } } } else { m_reader->raiseError(QString("The root element is expected to have the name \"places\" (root element was named \"%1\").").arg(m_reader->name().toString())); return false; } } else { m_reader->raiseError("Expected a root element named \"places\" (no root element found)."); return false; } if (m_reader->readNextStartElement()) { m_reader->raiseError(QString("A single root element named \"places\" was expected (second root element was named \"%1\")").arg(m_reader->name().toString())); return false; } return true; }