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

📄 xmlutils.java

📁 Android平台上的media player, iPhone风格
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            if (name != null) {                out.attribute(null, "name", name);            }            out.text(v.toString());            out.endTag(null, "string");            return;        } else if (v instanceof Integer) {            typeStr = "int";        } else if (v instanceof Long) {            typeStr = "long";        } else if (v instanceof Float) {            typeStr = "float";        } else if (v instanceof Double) {            typeStr = "double";        } else if (v instanceof Boolean) {            typeStr = "boolean";        } else if (v instanceof byte[]) {            writeByteArrayXml((byte[])v, name, out);            return;        } else if (v instanceof int[]) {            writeIntArrayXml((int[])v, name, out);            return;        } else if (v instanceof Map) {            writeMapXml((Map)v, name, out);            return;        } else if (v instanceof List) {            writeListXml((List)v, name, out);            return;        } else if (v instanceof CharSequence) {            // XXX This is to allow us to at least write something if            // we encounter styled text...  but it means we will drop all            // of the styling information. :(            out.startTag(null, "string");            if (name != null) {                out.attribute(null, "name", name);            }            out.text(v.toString());            out.endTag(null, "string");            return;        } else {            throw new RuntimeException("writeValueXml: unable to write value " + v);        }        out.startTag(null, typeStr);        if (name != null) {            out.attribute(null, "name", name);        }        out.attribute(null, "value", v.toString());        out.endTag(null, typeStr);    }    /**     * Read a HashMap from an InputStream containing XML.  The stream can     * previously have been written by writeMapXml().     *      * @param in The InputStream from which to read.     *      * @return HashMap The resulting map.     *      * @see #readListXml     * @see #readValueXml     * @see #readThisMapXml     * #see #writeMapXml     */    public static final HashMap readMapXml(InputStream in)    throws XmlPullParserException, java.io.IOException    {        XmlPullParser   parser = Xml.newPullParser();        parser.setInput(in, null);        return (HashMap)readValueXml(parser, new String[1]);    }    /**     * Read an ArrayList from an InputStream containing XML.  The stream can     * previously have been written by writeListXml().     *      * @param in The InputStream from which to read.     *      * @return HashMap The resulting list.     *      * @see #readMapXml     * @see #readValueXml     * @see #readThisListXml     * @see #writeListXml     */    public static final ArrayList readListXml(InputStream in)    throws XmlPullParserException, java.io.IOException    {        XmlPullParser   parser = Xml.newPullParser();        parser.setInput(in, null);        return (ArrayList)readValueXml(parser, new String[1]);    }    /**     * Read a HashMap object from an XmlPullParser.  The XML data could     * previously have been generated by writeMapXml().  The XmlPullParser     * must be positioned <em>after</em> the tag that begins the map.     *      * @param parser The XmlPullParser from which to read the map data.     * @param endTag Name of the tag that will end the map, usually "map".     * @param name An array of one string, used to return the name attribute     *             of the map's tag.     *      * @return HashMap The newly generated map.     *      * @see #readMapXml     */    public static final HashMap readThisMapXml(XmlPullParser parser, String endTag, String[] name)    throws XmlPullParserException, java.io.IOException    {        HashMap map = new HashMap();        int eventType = parser.getEventType();        do {            if (eventType == parser.START_TAG) {                Object val = readThisValueXml(parser, name);                if (name[0] != null) {                    //System.out.println("Adding to map: " + name + " -> " + val);                    map.put(name[0], val);                } else {                    throw new XmlPullParserException(                        "Map value without name attribute: " + parser.getName());                }            } else if (eventType == parser.END_TAG) {                if (parser.getName().equals(endTag)) {                    return map;                }                throw new XmlPullParserException(                    "Expected " + endTag + " end tag at: " + parser.getName());            }            eventType = parser.next();        } while (eventType != parser.END_DOCUMENT);        throw new XmlPullParserException(            "Document ended before " + endTag + " end tag");    }    /**     * Read an ArrayList object from an XmlPullParser.  The XML data could     * previously have been generated by writeListXml().  The XmlPullParser     * must be positioned <em>after</em> the tag that begins the list.     *      * @param parser The XmlPullParser from which to read the list data.     * @param endTag Name of the tag that will end the list, usually "list".     * @param name An array of one string, used to return the name attribute     *             of the list's tag.     *      * @return HashMap The newly generated list.     *      * @see #readListXml     */    public static final ArrayList readThisListXml(XmlPullParser parser, String endTag, String[] name)    throws XmlPullParserException, java.io.IOException    {        ArrayList list = new ArrayList();        int eventType = parser.getEventType();        do {            if (eventType == parser.START_TAG) {                Object val = readThisValueXml(parser, name);                list.add(val);                //System.out.println("Adding to list: " + val);            } else if (eventType == parser.END_TAG) {                if (parser.getName().equals(endTag)) {                    return list;                }                throw new XmlPullParserException(                    "Expected " + endTag + " end tag at: " + parser.getName());            }            eventType = parser.next();        } while (eventType != parser.END_DOCUMENT);        throw new XmlPullParserException(            "Document ended before " + endTag + " end tag");    }    /**     * Read an int[] object from an XmlPullParser.  The XML data could     * previously have been generated by writeIntArrayXml().  The XmlPullParser     * must be positioned <em>after</em> the tag that begins the list.     *      * @param parser The XmlPullParser from which to read the list data.     * @param endTag Name of the tag that will end the list, usually "list".     * @param name An array of one string, used to return the name attribute     *             of the list's tag.     *      * @return Returns a newly generated int[].     *      * @see #readListXml     */    public static final int[] readThisIntArrayXml(XmlPullParser parser,            String endTag, String[] name)            throws XmlPullParserException, java.io.IOException {                int num;        try {            num = Integer.parseInt(parser.getAttributeValue(null, "num"));        } catch (NullPointerException e) {            throw new XmlPullParserException(                    "Need num attribute in byte-array");        } catch (NumberFormatException e) {            throw new XmlPullParserException(                    "Not a number in num attribute in byte-array");        }                int[] array = new int[num];        int i = 0;        int eventType = parser.getEventType();        do {            if (eventType == parser.START_TAG) {                if (parser.getName().equals("item")) {                    try {                        array[i] = Integer.parseInt(                                parser.getAttributeValue(null, "value"));                    } catch (NullPointerException e) {                        throw new XmlPullParserException(                                "Need value attribute in item");                    } catch (NumberFormatException e) {                        throw new XmlPullParserException(                                "Not a number in value attribute in item");                    }                                    } else {                    throw new XmlPullParserException(                            "Expected item tag at: " + parser.getName());                }            } else if (eventType == parser.END_TAG) {                if (parser.getName().equals(endTag)) {                    return array;                } else if (parser.getName().equals("item")) {                    i++;                } else {                    throw new XmlPullParserException(                        "Expected " + endTag + " end tag at: "                        + parser.getName());                }            }            eventType = parser.next();        } while (eventType != parser.END_DOCUMENT);        throw new XmlPullParserException(            "Document ended before " + endTag + " end tag");    }    /**     * Read a flattened object from an XmlPullParser.  The XML data could     * previously have been written with writeMapXml(), writeListXml(), or     * writeValueXml().  The XmlPullParser must be positioned <em>at</em> the     * tag that defines the value.     *      * @param parser The XmlPullParser from which to read the object.     * @param name An array of one string, used to return the name attribute     *             of the value's tag.     *      * @return Object The newly generated value object.     *      * @see #readMapXml     * @see #readListXml     * @see #writeValueXml     */    public static final Object readValueXml(XmlPullParser parser, String[] name)    throws XmlPullParserException, java.io.IOException    {        int eventType = parser.getEventType();        do {            if (eventType == parser.START_TAG) {                return readThisValueXml(parser, name);            } else if (eventType == parser.END_TAG) {                throw new XmlPullParserException(                    "Unexpected end tag at: " + parser.getName());            } else if (eventType == parser.TEXT) {                throw new XmlPullParserException(                    "Unexpected text: " + parser.getText());            }            eventType = parser.next();        } while (eventType != parser.END_DOCUMENT);        throw new XmlPullParserException(            "Unexpected end of document");    }    private static final Object readThisValueXml(XmlPullParser parser, String[] name)    throws XmlPullParserException, java.io.IOException    {        final String valueName = parser.getAttributeValue(null, "name");        final String tagName = parser.getName();        //System.out.println("Reading this value tag: " + tagName + ", name=" + valueName);        Object res;        if (tagName.equals("null")) {            res = null;        } else if (tagName.equals("string")) {            String value = "";            int eventType;            while ((eventType = parser.next()) != parser.END_DOCUMENT) {                if (eventType == parser.END_TAG) {                    if (parser.getName().equals("string")) {                        name[0] = valueName;                        //System.out.println("Returning value for " + valueName + ": " + value);                        return value;                    }                    throw new XmlPullParserException(                        "Unexpected end tag in <string>: " + parser.getName());                } else if (eventType == parser.TEXT) {                    value += parser.getText();                } else if (eventType == parser.START_TAG) {                    throw new XmlPullParserException(                        "Unexpected start tag in <string>: " + parser.getName());                }            }            throw new XmlPullParserException(                "Unexpected end of document in <string>");        } else if (tagName.equals("int")) {            res = Integer.parseInt(parser.getAttributeValue(null, "value"));        } else if (tagName.equals("long")) {            res = Long.valueOf(parser.getAttributeValue(null, "value"));        } else if (tagName.equals("float")) {            res = new Float(parser.getAttributeValue(null, "value"));        } else if (tagName.equals("double")) {            res = new Double(parser.getAttributeValue(null, "value"));        } else if (tagName.equals("boolean")) {            res = Boolean.valueOf(parser.getAttributeValue(null, "value"));        } else if (tagName.equals("int-array")) {            parser.next();            res = readThisIntArrayXml(parser, "int-array", name);            name[0] = valueName;            //System.out.println("Returning value for " + valueName + ": " + res);            return res;        } else if (tagName.equals("map")) {            parser.next();            res = readThisMapXml(parser, "map", name);            name[0] = valueName;            //System.out.println("Returning value for " + valueName + ": " + res);            return res;        } else if (tagName.equals("list")) {            parser.next();            res = readThisListXml(parser, "list", name);            name[0] = valueName;            //System.out.println("Returning value for " + valueName + ": " + res);            return res;        } else {            throw new XmlPullParserException(                "Unknown tag: " + tagName);        }        // Skip through to end tag.        int eventType;        while ((eventType = parser.next()) != parser.END_DOCUMENT) {            if (eventType == parser.END_TAG) {                if (parser.getName().equals(tagName)) {                    name[0] = valueName;                    //System.out.println("Returning value for " + valueName + ": " + res);                    return res;                }                throw new XmlPullParserException(                    "Unexpected end tag in <" + tagName + ">: " + parser.getName());            } else if (eventType == parser.TEXT) {                throw new XmlPullParserException(                "Unexpected text in <" + tagName + ">: " + parser.getName());            } else if (eventType == parser.START_TAG) {                throw new XmlPullParserException(                    "Unexpected start tag in <" + tagName + ">: " + parser.getName());            }        }        throw new XmlPullParserException(            "Unexpected end of document in <" + tagName + ">");    }    public static final void beginDocument(XmlPullParser parser, String firstElementName) throws XmlPullParserException, IOException    {        int type;        while ((type=parser.next()) != parser.START_TAG                   && type != parser.END_DOCUMENT) {            ;        }        if (type != parser.START_TAG) {            throw new XmlPullParserException("No start tag found");        }                if (!parser.getName().equals(firstElementName)) {            throw new XmlPullParserException("Unexpected start tag: found " + parser.getName() +                    ", expected " + firstElementName);        }    }        public static final void nextElement(XmlPullParser parser) throws XmlPullParserException, IOException    {        int type;        while ((type=parser.next()) != parser.START_TAG                   && type != parser.END_DOCUMENT) {            ;        }       }}

⌨️ 快捷键说明

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