src/main/java/org/dom4j/io/XPPPacketReader.java
public Document parseDocument() throws DocumentException, IOException,
            XmlPullParserException {
        DocumentFactory df = getDocumentFactory();
        Document document = df.createDocument();
        Element parent = null;
        XmlPullParser pp = getXPPParser();
        int count = 0;
        while (true) {
            int type = -1;
            type = pp.nextToken();
            switch (type) {
            case XmlPullParser.PROCESSING_INSTRUCTION: {
                String text = pp.getText();
                int loc = text.indexOf(" ");
                if (loc >= 0) {
                    document.addProcessingInstruction(text.substring(0, loc),
                            text.substring(loc + 1));
                } else
                    document.addProcessingInstruction(text, "");
                break;
            }
            case XmlPullParser.COMMENT: {
                if (parent != null)
                    parent.addComment(pp.getText());
                else
                    document.addComment(pp.getText());
                break;
            }
            case XmlPullParser.CDSECT: {
                String text = pp.getText();
                if (parent != null) {
                    parent.addCDATA(text);
                } else {
                    if (text.trim().length() > 0) {
                        throw new DocumentException(
                                "Cannot have text content outside of the root document");
                    }
                }
                break;

            }
            case XmlPullParser.ENTITY_REF: {
                String text = pp.getText();
                if (parent != null) {
                    parent.addText(text);
                } else {
                    if (text.trim().length() > 0) {
                        throw new DocumentException(
                                "Cannot have an entityref outside of the root document");
                    }
                }
                break;
            }
            case XmlPullParser.END_DOCUMENT: {
                return document;
            }
            case XmlPullParser.START_TAG: {
                QName qname = (pp.getPrefix() == null) ? df.createQName(
                        pp.getName(), pp.getNamespace()) : df.createQName(
                        pp.getName(), pp.getPrefix(), pp.getNamespace());
                Element newElement = null;
                // Do not include the namespace if this is the start tag of a
                // new packet
                // This avoids including "jabber:client", "jabber:server" or
                // "jabber:component:accept"
                if ("jabber:client".equals(qname.getNamespaceURI())
                        || "jabber:server".equals(qname.getNamespaceURI())
                        || "jabber:component:accept".equals(qname
                                .getNamespaceURI())
                        || "http://jabber.org/protocol/httpbind".equals(qname
                                .getNamespaceURI())) {
                    newElement = df.createElement(pp.getName());
                } else {
                    newElement = df.createElement(qname);
                }
                int nsStart = pp.getNamespaceCount(pp.getDepth() - 1);
                int nsEnd = pp.getNamespaceCount(pp.getDepth());
                for (int i = nsStart; i < nsEnd; i++)
                    if (pp.getNamespacePrefix(i) != null)
                        newElement.addNamespace(pp.getNamespacePrefix(i),
                                pp.getNamespaceUri(i));
                for (int i = 0; i < pp.getAttributeCount(); i++) {
                    QName qa = (pp.getAttributePrefix(i) == null) ? df
                            .createQName(pp.getAttributeName(i)) : df
                            .createQName(pp.getAttributeName(i),
                                    pp.getAttributePrefix(i),
                                    pp.getAttributeNamespace(i));
                    newElement.addAttribute(qa, pp.getAttributeValue(i));
                }
                if (parent != null) {
                    parent.add(newElement);
                } else {
                    document.add(newElement);
                }
                parent = newElement;
                count++;
                break;
            }
            case XmlPullParser.END_TAG: {
                if (parent != null) {
                    parent = parent.getParent();
                }
                count--;
                if (count < 1) {
                    return document;
                }
                break;
            }
            case XmlPullParser.TEXT: {
                String text = pp.getText();
                if (parent != null) {
                    parent.addText(text);
                } else {
                    if (text.trim().length() > 0) {
                        throw new DocumentException(
                                "Cannot have text content outside of the root document");
                    }
                }
                break;
            }
            default: {
                ;
            }
            }
        }
    }
public Document parseDocument() throws DocumentException, IOException,
            XmlPullParserException {
        DocumentFactory df = getDocumentFactory();
        Document document = df.createDocument();
        Element parent = null;
        XmlPullParser pp = getXPPParser();
        int count = 0;
        while (true) {
            int type = -1;
            type = pp.nextToken();
            switch (type) {
            case XmlPullParser.PROCESSING_INSTRUCTION: {
                String text = pp.getText();
                int loc = text.indexOf(" ");
                if (loc >= 0) {
                    document.addProcessingInstruction(text.substring(0, loc),
                            text.substring(loc + 1));
                } else
                    document.addProcessingInstruction(text, "");
                break;
            }
            case XmlPullParser.COMMENT: {
                if (parent != null)
                    parent.addComment(pp.getText());
                else
                    document.addComment(pp.getText());
                break;
            }
            case XmlPullParser.CDSECT: {
                String text = pp.getText();
                if (parent != null) {
                    parent.addCDATA(text);
                } else {
                    if (text.trim().length() > 0) {
                        throw new DocumentException(
                                "Cannot have text content outside of the root document");
                    }
                }
                break;

            }
            case XmlPullParser.ENTITY_REF: {
                String text = pp.getText();
                if (parent != null) {
                    parent.addText(text);
                } else {
                    if (text.trim().length() > 0) {
                        throw new DocumentException(
                                "Cannot have an entityref outside of the root document");
                    }
                }
                break;
            }
            case XmlPullParser.END_DOCUMENT: {
                return document;
            }
            case XmlPullParser.START_TAG: {
                QName qname = (pp.getPrefix() == null) ? df.createQName(
                        pp.getName(), pp.getNamespace()) : df.createQName(
                        pp.getName(), pp.getPrefix(), pp.getNamespace());
                Element newElement = null;
                // Do not include the namespace if this is the start tag of a
                // new packet
                // This avoids including "jabber:client", "jabber:server" or
                // "jabber:component:accept"
                if ("jabber:client".equals(qname.getNamespaceURI())
                        || "jabber:server".equals(qname.getNamespaceURI())
                        || "jabber:component:accept".equals(qname
                                .getNamespaceURI())
                        || "http://jabber.org/protocol/httpbind".equals(qname
                                .getNamespaceURI())) {
                    newElement = df.createElement(pp.getName());
                } else {
                    newElement = df.createElement(qname);
                }
                int nsStart = pp.getNamespaceCount(pp.getDepth() - 1);
                int nsEnd = pp.getNamespaceCount(pp.getDepth());
                for (int i = nsStart; i < nsEnd; i++)
                    if (pp.getNamespacePrefix(i) != null)
                        newElement.addNamespace(pp.getNamespacePrefix(i),
                                pp.getNamespaceUri(i));
                for (int i = 0; i < pp.getAttributeCount(); i++) {
                    QName qa = (pp.getAttributePrefix(i) == null) ? df
                            .createQName(pp.getAttributeName(i)) : df
                            .createQName(pp.getAttributeName(i),
                                    pp.getAttributePrefix(i),
                                    pp.getAttributeNamespace(i));
                    newElement.addAttribute(qa, pp.getAttributeValue(i));
                }
                if (parent != null) {
                    parent.add(newElement);
                } else {
                    document.add(newElement);
                }
                parent = newElement;
                count++;
                break;
            }
            case XmlPullParser.END_TAG: {
                if (parent != null) {
                    parent = parent.getParent();
                }
                count--;
                if (count < 1) {
                    return document;
                }
                break;
            }
            case XmlPullParser.TEXT: {
                String text = pp.getText();
                if (parent != null) {
                    parent.addText(text);
                } else {
                    if (text.trim().length() > 0) {
                        throw new DocumentException(
                                "Cannot have text content outside of the root document");
                    }
                }
                break;
            }
            default: {
                ;
            }
            }
        }
    }
public Document parseDocument ( ) throws DocumentException , IOException , XmlPullParserException { DocumentFactory df = getDocumentFactory ( ) ; Document document = df . createDocument ( ) ; Element parent = null ; XmlPullParser pp = getXPPParser ( ) ; int count = 0 ; while ( true ) { int type = - 1 ; type = pp . nextToken ( ) ; switch ( type ) { case XmlPullParser . PROCESSING_INSTRUCTION : { String text = pp . getText ( ) ; int loc = text . indexOf ( " " ) ; if ( loc >= 0 ) { document . addProcessingInstruction ( text . substring ( 0 , loc ) , text . substring ( loc + 1 ) ) ; } else document . addProcessingInstruction ( text , "" ) ; break ; } case XmlPullParser . COMMENT : { if ( parent != null ) parent . addComment ( pp . getText ( ) ) ; else document . addComment ( pp . getText ( ) ) ; break ; } case XmlPullParser . CDSECT : { String text = pp . getText ( ) ; if ( parent != null ) { parent . addCDATA ( text ) ; } else { if ( text . trim ( ) . length ( ) > 0 ) { throw new DocumentException ( "Cannot have text content outside of the root document" ) ; } } break ; } case XmlPullParser . ENTITY_REF : { String text = pp . getText ( ) ; if ( parent != null ) { parent . addText ( text ) ; } else { if ( text . trim ( ) . length ( ) > 0 ) { throw new DocumentException ( "Cannot have an entityref outside of the root document" ) ; } } break ; } case XmlPullParser . END_DOCUMENT : { return document ; } case XmlPullParser . START_TAG : { QName qname = ( pp . getPrefix ( ) == null ) ? df . createQName ( pp . getName ( ) , pp . getNamespace ( ) ) : df . createQName ( pp . getName ( ) , pp . getPrefix ( ) , pp . getNamespace ( ) ) ; Element newElement = null ; // Do not include the namespace if this is the start tag of a // new packet // This avoids including "jabber:client", "jabber:server" or // "jabber:component:accept" if ( "jabber:client" . equals ( qname . getNamespaceURI ( ) ) || "jabber:server" . equals ( qname . getNamespaceURI ( ) ) || "jabber:component:accept" . equals ( qname . getNamespaceURI ( ) ) || "http://jabber.org/protocol/httpbind" . equals ( qname . getNamespaceURI ( ) ) ) { newElement = df . createElement ( pp . getName ( ) ) ; } else { newElement = df . createElement ( qname ) ; } int nsStart = pp . getNamespaceCount ( pp . getDepth ( ) - 1 ) ; int nsEnd = pp . getNamespaceCount ( pp . getDepth ( ) ) ; for ( int i = nsStart ; i < nsEnd ; i ++ ) if ( pp . getNamespacePrefix ( i ) != null ) newElement . addNamespace ( pp . getNamespacePrefix ( i ) , pp . getNamespaceUri ( i ) ) ; for ( int i = 0 ; i < pp . getAttributeCount ( ) ; i ++ ) { QName qa = ( pp . getAttributePrefix ( i ) == null ) ? df . createQName ( pp . getAttributeName ( i ) ) : df . createQName ( pp . getAttributeName ( i ) , pp . getAttributePrefix ( i ) , pp . getAttributeNamespace ( i ) ) ; newElement . addAttribute ( qa , pp . getAttributeValue ( i ) ) ; } if ( parent != null ) { parent . add ( newElement ) ; } else { document . add ( newElement ) ; } parent = newElement ; count ++ ; break ; } case XmlPullParser . END_TAG : { if ( parent != null ) { parent = parent . getParent ( ) ; } count -- ; if ( count < 1 ) { return document ; } break ; } case XmlPullParser . TEXT : { String text = pp . getText ( ) ; if ( parent != null ) { parent . addText ( text ) ; } else { if ( text . trim ( ) . length ( ) > 0 ) { throw new DocumentException ( "Cannot have text content outside of the root document" ) ; } } break ; } default : { ; } } } }
-------------------------------------------------------------------------
-------------------------------------------------------------------------