void QWbXmlReader::parseElementBody() { QString name; QXmlAttributes attrs; bool hasAttrs; bool hasContent; while ( d->tokenType != QWbXmlToken_EOF) { switch ( d->tokenType ) { case QWbXmlToken_Tag: { name = d->tokenValue; hasAttrs = !d->tagMode; hasContent = d->hasContent; nextToken(); attrs.clear(); if ( hasAttrs ) parseAttributes( attrs ); d->contentHandler->startElement ( QString(), name, name, attrs ); if ( hasContent ) parseElementBody(); d->contentHandler->endElement( QString(), name, name ); } break; case QWbXmlToken_EndTag: { nextToken(); return; } // Not reached. case QWbXmlToken_PI: { nextToken(); attrs.clear(); parseAttributes( attrs ); if ( attrs.length() > 0 ) { d->contentHandler->processingInstruction ( attrs.localName(0), attrs.value(0) ); } } break; case QWbXmlToken_String: { d->contentHandler->characters( d->tokenValue ); nextToken(); } break; default: { nextToken(); } break; } } }