xmlstreamreaderfromdom.java

来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 739 行 · 第 1/2 页

JAVA
739
字号
            if (parent == null) {
                parent = (Element)nextCursorStack.peek();
            }
            element = (Element)cursor.getParentNode();
        }
        if (element == cacheNCIKey) {
            return cacheNCI;
        }
        cacheNCIKey = element;
        cacheNCI = new NamespaceContextFromDOM(element);
        return cacheNCI;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getEventType()
      */
    public int getEventType() {
        return event;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getText()
      */
    public String getText() {
        if (event == XMLStreamReader.CHARACTERS ||
                event == XMLStreamReader.CDATA ||
                event == XMLStreamReader.COMMENT) {
            return ((CharacterData)cursor).getData();
        }
        throw new IllegalStateException(Messages.getMessage("XMLSRErr4", "getText()"));
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getTextCharacters()
      */
    public char[] getTextCharacters() {
        return getText().toCharArray();
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getTextCharacters(int, char[], int, int)
      */
    public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length)
            throws XMLStreamException {
        String value = getText();
        // Calculate the sourceEnd index
        int sourceEnd = sourceStart + length;
        if (value.length() < sourceEnd) {
            sourceEnd = value.length();
        }
        value.getChars(sourceStart, sourceEnd, target, targetStart);
        return sourceEnd - sourceStart;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getTextStart()
      */
    public int getTextStart() {
        return 0;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getTextLength()
      */
    public int getTextLength() {
        return getText().length();
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getEncoding()
      */
    public String getEncoding() {
        return null;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#hasText()
      */
    public boolean hasText() {
        return (event == XMLStreamReader.CHARACTERS ||
                event == XMLStreamReader.CDATA ||
                event == XMLStreamReader.COMMENT);
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getLocation()
      */
    public Location getLocation() {
        return dummyLocation;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getName()
      */
    public QName getName() {
        if (cursor instanceof Element) {
            return new QName(cursor.getNamespaceURI(), cursor.getLocalName());
        }
        throw new IllegalStateException(Messages.getMessage("XMLSRErr4", "getName()"));
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getLocalName()
      */
    public String getLocalName() {
        if (cursor instanceof Element) {
            return cursor.getLocalName();
        }
        throw new IllegalStateException(Messages.getMessage("XMLSRErr4", "getLocalName()"));
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#hasName()
      */
    public boolean hasName() {
        return (isStartElement() || isEndElement());
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getNamespaceURI()
      */
    public String getNamespaceURI() {
        if (cursor instanceof Element) {
            return cursor.getNamespaceURI();
        } else {
            return null;
        }
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getPrefix()
      */
    public String getPrefix() {
        if (cursor instanceof Element) {
            return cursor.getPrefix();
        } else {
            return null;
        }
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getVersion()
      */
    public String getVersion() {
        return null;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#isStandalone()
      */
    public boolean isStandalone() {
        return false;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#standaloneSet()
      */
    public boolean standaloneSet() {
        return false;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getCharacterEncodingScheme()
      */
    public String getCharacterEncodingScheme() {
        return null;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getPITarget()
      */
    public String getPITarget() {
        return null;
    }

    /* (non-Javadoc)
      * @see javax.xml.stream.XMLStreamReader#getPIData()
      */
    public String getPIData() {
        return null;
    }

    /** Sets nextCursor and nextEvent from using the current cursor and event. */
    private void getNext() throws IllegalStateException {
        switch (event) {
            case XMLStreamReader.START_DOCUMENT: {
                nextCursor = cursor;
                nextEvent = XMLStreamReader.START_ELEMENT;
                break;
            }

            case XMLStreamReader.START_ELEMENT: {
                if (cursor.getFirstChild() != null) {
                    nextCursorStack.push(nextCursor);
                    nextCursor = cursor.getFirstChild();
                    nextEvent = startEvent(nextCursor);
                } else {
                    nextEvent = XMLStreamReader.END_ELEMENT;
                }
                break;
            }
            case XMLStreamReader.ATTRIBUTE: {
                throw new IllegalStateException(Messages.getMessage("XMLSRErr5", "ATTRIBUTE"));
            }
            case XMLStreamReader.NAMESPACE: {
                throw new IllegalStateException(Messages.getMessage("XMLSRErr5", "NAMESPACE"));
            }
            case XMLStreamReader.END_ELEMENT:
            case XMLStreamReader.CHARACTERS:
            case XMLStreamReader.CDATA:
            case XMLStreamReader.COMMENT:
            case XMLStreamReader.SPACE:
            case XMLStreamReader.PROCESSING_INSTRUCTION:
            case XMLStreamReader.ENTITY_REFERENCE:
            case XMLStreamReader.DTD: {
                if (cursor.getNextSibling() != null) {
                    nextCursor = cursor.getNextSibling();
                    nextEvent = startEvent(nextCursor);
                } else if (cursor == root) {
                    nextEvent = XMLStreamReader.END_DOCUMENT;
                } else {
                    // The following does not work with
                    // Axiom Text nodes
                    // nextCursor = cursor.getParentNode();
                    // This is the reason why a stack is used.
                    nextCursor = nextCursorStack.pop();

                    nextEvent = XMLStreamReader.END_ELEMENT;
                }
                break;
            }

            case XMLStreamReader.END_DOCUMENT: {
                nextCursor = null;
                nextEvent = -1;
            }
            default:
                throw new IllegalStateException(
                        Messages.getMessage("XMLSRErr5", String.valueOf(event)));
        }

    }

    /**
     * Returns the start event for this particular node
     *
     * @param node
     * @return
     */
    private int startEvent(Node node) {
        if (node instanceof ProcessingInstruction) {
            return XMLStreamReader.PROCESSING_INSTRUCTION;
        }
        if (node instanceof CDATASection) {
            return XMLStreamReader.CDATA;
        }
        if (node instanceof Comment) {
            return XMLStreamReader.COMMENT;
        }
        if (node instanceof Text) {
            if (node instanceof javax.xml.soap.Text) {
                javax.xml.soap.Text soapText = (javax.xml.soap.Text)node;
                if (soapText.isComment()) {
                    return XMLStreamReader.COMMENT;
                } else {
                    return XMLStreamReader.CHARACTERS;
                }
            }
            return XMLStreamReader.CHARACTERS;
        }
        if (node instanceof Element) {
            return XMLStreamReader.START_ELEMENT;
        }
        if (node instanceof Attr) {
            return XMLStreamReader.ATTRIBUTE;
        }
        if (node instanceof Document) {
            return XMLStreamReader.START_DOCUMENT;
        }
        if (node instanceof EntityReference) {
            return XMLStreamReader.ENTITY_REFERENCE;
        }
        if (node instanceof DocumentType) {
            return XMLStreamReader.DTD;
        }
        return -1;
    }

    // This is the definition of a dummy Location
    private DummyLocation dummyLocation = new DummyLocation();

    private class DummyLocation implements Location {

        public int getLineNumber() {
            return -1;
        }

        public int getColumnNumber() {
            return 0;
        }

        public int getCharacterOffset() {
            return 0;
        }

        public String getPublicId() {
            return null;
        }

        public String getSystemId() {
            return null;
        }

    }

    public List getNamespaceDeclarations() {
        Element element = null;
        if (cursor instanceof Element) {
            element = (Element)cursor;
        } else {
            return new ArrayList();
        }
        if (element == cacheNDKey) {
            return cacheND;
        }
        cacheNDKey = element;
        cacheND = new ArrayList();
        NamedNodeMap attrs = element.getAttributes();
        if (attrs != null) {
            for (int i = 0; i < attrs.getLength(); i++) {
                Attr attr = (Attr)attrs.item(i);
                String name = attr.getNodeName();
                if (name.startsWith("xmlns")) {
                    String prefix = "";
                    if (name.startsWith("xmlns:")) {
                        prefix = name.substring(6);
                    }
                    NamespaceDeclare nd = new NamespaceDeclare(prefix, attr.getNodeValue());
                    cacheND.add(nd);
                }
            }
        }
        return cacheND;
    }

    class NamespaceDeclare {
        String prefix;
        String uri;

        NamespaceDeclare(String prefix, String uri) {
            this.prefix = prefix;
            this.uri = uri;
        }

        String getPrefix() {
            return prefix;
        }

        String getURI() {
            return uri;
        }
    }

    Node getNode() {
        return cursor;
	}
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?