⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kxmlparser.java

📁 KXML一个基于j2me的xml解析器
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        srcPos = 0;        srcCount = 0;        peekCount = 0;        depth = 0;        entityMap = new Hashtable();        entityMap.put("amp", "&");        entityMap.put("apos", "'");        entityMap.put("gt", ">");        entityMap.put("lt", "<");        entityMap.put("quot", "\"");    }    public void setInput(InputStream is, String _enc)        throws XmlPullParserException {        srcPos = 0;        srcCount = 0;        String enc = _enc;        if (is == null)            throw new IllegalArgumentException();        try {            if (enc == null) {                // read four bytes                 int chk = 0;                while (srcCount < 4) {                    int i = is.read();                    if (i == -1)                        break;                    chk = (chk << 8) | i;                    srcBuf[srcCount++] = (char) i;                }                if (srcCount == 4) {                    switch (chk) {                        case 0x00000FEFF :                            enc = "UTF-32BE";                            srcCount = 0;                            break;                        case 0x0FFFE0000 :                            enc = "UTF-32LE";                            srcCount = 0;                            break;                        case 0x03c :                            enc = "UTF-32BE";                            srcBuf[0] = '<';                            srcCount = 1;                            break;                        case 0x03c000000 :                            enc = "UTF-32LE";                            srcBuf[0] = '<';                            srcCount = 1;                            break;                        case 0x0003c003f :                            enc = "UTF-16BE";                            srcBuf[0] = '<';                            srcBuf[1] = '?';                            srcCount = 2;                            break;                        case 0x03c003f00 :                            enc = "UTF-16LE";                            srcBuf[0] = '<';                            srcBuf[1] = '?';                            srcCount = 2;                            break;                        case 0x03c3f786d :                            while (true) {                                int i = is.read();                                if (i == -1)                                    break;                                srcBuf[srcCount++] = (char) i;                                if (i == '>') {                                    String s = new String(srcBuf, 0, srcCount);                                    int i0 = s.indexOf("encoding");                                    if (i0 != -1) {                                        while (s.charAt(i0) != '"'                                            && s.charAt(i0) != '\'')                                            i0++;                                        char deli = s.charAt(i0++);                                        int i1 = s.indexOf(deli, i0);                                        enc = s.substring(i0, i1);                                    }                                    break;                                }                            }                        default :                            if ((chk & 0x0ffff0000) == 0x0FEFF0000) {                                enc = "UTF-16BE";                                srcBuf[0] =                                    (char) ((srcBuf[2] << 8) | srcBuf[3]);                                srcCount = 1;                            }                            else if ((chk & 0x0ffff0000) == 0x0fffe0000) {                                enc = "UTF-16LE";                                srcBuf[0] =                                    (char) ((srcBuf[3] << 8) | srcBuf[2]);                                srcCount = 1;                            }                            else if ((chk & 0x0ffffff00) == 0x0EFBBBF00) {                                enc = "UTF-8";                                srcBuf[0] = srcBuf[3];                                srcCount = 1;                            }                    }                }            }            if (enc == null)                enc = "UTF-8";            int sc = srcCount;            setInput(new InputStreamReader(is, enc));            encoding = _enc;            srcCount = sc;        }        catch (Exception e) {            throw new XmlPullParserException(                "Invalid stream or encoding: " + e.toString(),                this,                e);        }    }    public boolean getFeature(String feature) {        if (XmlPullParser.FEATURE_PROCESS_NAMESPACES.equals(feature))            return processNsp;        else if (isProp(feature, false, "relaxed"))            return relaxed;        else            return false;    }    public String getInputEncoding() {        return encoding;    }    public void defineEntityReplacementText(String entity, String value)        throws XmlPullParserException {        if (entityMap == null)            throw new RuntimeException("entity replacement text must be defined after setInput!");        entityMap.put(entity, value);    }    public Object getProperty(String property) {        if (isProp(property, true, "xmldecl-version"))            return version;        if (isProp(property, true, "xmldecl-standalone"))            return standalone;		if (isProp(property, true, "location"))            			return location != null ? location : reader.toString();        return null;    }    public int getNamespaceCount(int depth) {        if (depth > this.depth)            throw new IndexOutOfBoundsException();        return nspCounts[depth];    }    public String getNamespacePrefix(int pos) {        return nspStack[pos << 1];    }    public String getNamespaceUri(int pos) {        return nspStack[(pos << 1) + 1];    }    public String getNamespace(String prefix) {        if ("xml".equals(prefix))            return "http://www.w3.org/XML/1998/namespace";        if ("xmlns".equals(prefix))            return "http://www.w3.org/2000/xmlns/";        for (int i = (getNamespaceCount(depth) << 1) - 2; i >= 0; i -= 2) {            if (prefix == null) {                if (nspStack[i] == null)                    return nspStack[i + 1];            }            else if (prefix.equals(nspStack[i]))                return nspStack[i + 1];        }        return null;    }    public int getDepth() {        return depth;    }    public String getPositionDescription() {        StringBuffer buf =            new StringBuffer(type < TYPES.length ? TYPES[type] : "unknown");        buf.append(' ');        if (type == START_TAG || type == END_TAG) {            if (degenerated)                buf.append("(empty) ");            buf.append('<');            if (type == END_TAG)                buf.append('/');            if (prefix != null)                buf.append("{" + namespace + "}" + prefix + ":");            buf.append(name);            int cnt = attributeCount << 2;            for (int i = 0; i < cnt; i += 4) {                buf.append(' ');                if (attributes[i + 1] != null)                    buf.append(                        "{" + attributes[i] + "}" + attributes[i + 1] + ":");                buf.append(attributes[i + 2] + "='" + attributes[i + 3] + "'");            }            buf.append('>');        }        else if (type == IGNORABLE_WHITESPACE);        else if (type != TEXT)            buf.append(getText());        else if (isWhitespace)            buf.append("(whitespace)");        else {            String text = getText();            if (text.length() > 16)                text = text.substring(0, 16) + "...";            buf.append(text);        }		buf.append("@"+line + ":" + column);		if(location != null){			buf.append(" in ");			buf.append(location);		}		else if(reader != null){			buf.append(" in ");			buf.append(reader.toString());		}        return buf.toString();    }    public int getLineNumber() {        return line;    }    public int getColumnNumber() {        return column;    }    public boolean isWhitespace() throws XmlPullParserException {        if (type != TEXT && type != IGNORABLE_WHITESPACE && type != CDSECT)            exception(ILLEGAL_TYPE);        return isWhitespace;    }    public String getText() {        return type < TEXT            || (type == ENTITY_REF && unresolved) ? null : get(0);    }    public char[] getTextCharacters(int[] poslen) {        if (type >= TEXT) {            if (type == ENTITY_REF) {                poslen[0] = 0;                poslen[1] = name.length();                return name.toCharArray();            }            poslen[0] = 0;            poslen[1] = txtPos;            return txtBuf;        }        poslen[0] = -1;        poslen[1] = -1;        return null;    }    public String getNamespace() {        return namespace;    }    public String getName() {        return name;    }    public String getPrefix() {        return prefix;    }    public boolean isEmptyElementTag() throws XmlPullParserException {        if (type != START_TAG)            exception(ILLEGAL_TYPE);        return degenerated;    }    public int getAttributeCount() {        return attributeCount;    }    public String getAttributeType(int index) {        return "CDATA";    }    public boolean isAttributeDefault(int index) {        return false;    }    public String getAttributeNamespace(int index) {        if (index >= attributeCount)            throw new IndexOutOfBoundsException();        return attributes[index << 2];    }    public String getAttributeName(int index) {        if (index >= attributeCount)            throw new IndexOutOfBoundsException();        return attributes[(index << 2) + 2];    }    public String getAttributePrefix(int index) {        if (index >= attributeCount)            throw new IndexOutOfBoundsException();        return attributes[(index << 2) + 1];    }    public String getAttributeValue(int index) {        if (index >= attributeCount)            throw new IndexOutOfBoundsException();        return attributes[(index << 2) + 3];    }    public String getAttributeValue(String namespace, String name) {        for (int i = (attributeCount << 2) - 4; i >= 0; i -= 4) {            if (attributes[i + 2].equals(name)                && (namespace == null || attributes[i].equals(namespace)))                return attributes[i + 3];        }        return null;    }    public int getEventType() throws XmlPullParserException {        return type;    }    public int next() throws XmlPullParserException, IOException {        txtPos = 0;        isWhitespace = true;        int minType = 9999;        token = false;        do {            nextImpl();            if (type < minType)                minType = type;            //	    if (curr <= TEXT) type = curr;         }        while (minType > ENTITY_REF // ignorable            || (minType >= TEXT && peekType() >= TEXT));        type = minType;        if (type > TEXT)            type = TEXT;        return type;    }    public int nextToken() throws XmlPullParserException, IOException {        isWhitespace = true;        txtPos = 0;        token = true;        nextImpl();        return type;    }    //    // utility methods to make XML parsing easier ...    public int nextTag() throws XmlPullParserException, IOException {        next();        if (type == TEXT && isWhitespace)            next();        if (type != END_TAG && type != START_TAG)            exception("unexpected type");        return type;    }    public void require(int type, String namespace, String name)        throws XmlPullParserException, IOException {        if (type != this.type            || (namespace != null && !namespace.equals(getNamespace()))            || (name != null && !name.equals(getName())))            exception(                "expected: " + TYPES[type] + " {" + namespace + "}" + name);    }    public String nextText() throws XmlPullParserException, IOException {        if (type != START_TAG)            exception("precondition: START_TAG");        next();        String result;        if (type == TEXT) {            result = getText();            next();        }        else            result = "";        if (type != END_TAG)            exception("END_TAG expected");        return result;    }    public void setFeature(String feature, boolean value)        throws XmlPullParserException {        if (XmlPullParser.FEATURE_PROCESS_NAMESPACES.equals(feature))            processNsp = value;        else if (isProp(feature, false, "relaxed"))            relaxed = value;        else            exception("unsupported feature: " + feature);    }    public void setProperty(String property, Object value)        throws XmlPullParserException {        if(isProp(property, true, "location"))        	location = value;        else	        throw new XmlPullParserException("unsupported property: " + property);    }    /**      * Skip sub tree that is currently porser positioned on.      * <br>NOTE: parser must be on START_TAG and when funtion returns      * parser will be positioned on corresponding END_TAG.       */    //	Implementation copied from Alek's mail...     public void skipSubTree() throws XmlPullParserException, IOException {        require(START_TAG, null, null);        int level = 1;        while (level > 0) {            int eventType = next();            if (eventType == END_TAG) {                --level;            }            else if (eventType == START_TAG) {                ++level;            }        }    }}

⌨️ 快捷键说明

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