Esempio n. 1
0
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;
        }
    }
}