Android-XmlUtil工具类

Posted android-deli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android-XmlUtil工具类相关的知识,希望对你有一定的参考价值。

/**
*
XML文件工具类,包含:将xml文件解析成实体集合、获取xml标签值、将标签值解析成实体集合
*/

public class XmlUtil {
  private XmlUtil(){}

    /*-
     * XML文件解析成实体,不涉及到标签的属性值。
     * @param xml    xml字符串文件
     * @param clazz        对应实体的class文件
     * @param tagEntity
     * 开始解析实体的标签,例如下面的实例中就是student<br>
     *   <person>
     *        <student>
     *                 <name>Lucy</name>
     *                 <age>21</age>
     *         </student>
     *   </person>
     * @return 返回解析的对应实体文件
     */
    public static<T> List<T> xmlToObject(String xml, Class<T> clazz, String tagEntity){
        List<T> list = null;
        XmlPullParser xmlPullParser = Xml.newPullParser();
        InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
        try {
            xmlPullParser.setInput(inputStream, "utf-8");
            Field[] fields = clazz.getDeclaredFields();
            int type = xmlPullParser.getEventType();
            String lastTag = "";
            T t = null;
            while (type != XmlPullParser.END_DOCUMENT) {
                switch (type) {
                    case XmlPullParser.START_DOCUMENT:
                        list = new ArrayList<T>();
                        break;
                    case XmlPullParser.START_TAG:
                        String tagName = xmlPullParser.getName();
                        if(tagEntity.equals(tagName)){
                            t = clazz.newInstance();
                            lastTag = tagEntity;
                        }else if(tagEntity.equals(lastTag)){
                            String textValue = xmlPullParser.nextText();
                            String fieldName = xmlPullParser.getName();
                            for(Field field : fields){
                                ReflectUtil.setFieldValue(t,field,fieldName,textValue);
                            }
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        tagName = xmlPullParser.getName();
                        if(tagEntity.equals(tagName)){
                            list.add(t);
                            lastTag = "";
                        }
                        break;
                    case XmlPullParser.END_DOCUMENT:
                        break;
                }
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 获取xml字符串标签中的属性值
     * @param xml      xml字符串
     * @param clazz      转换成对应的实体
     * @param tagName    实体对应xml字符串的起始标签,如下面实例中的person标签<br>
     * <person name="Lucy" age="12">
     *        <student>
     *                 <name>Lucy</name>
     *                 <age>21</age>
     *         </student>
     * </person>
     * @return  返回属性值组成的List对象集合。
     */
    public static<T> List<T> attributeToObject(String xml, Class<T> clazz, String tagName){
        if(TextUtils.isEmpty(tagName))return null;
        List<T> list = null;
        XmlPullParser xmlPullParser = Xml.newPullParser();
        InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
        try {
            xmlPullParser.setInput(inputStream, "utf-8");
            int type = xmlPullParser.getEventType();
            T t = null;
            while(type != XmlPullParser.END_DOCUMENT){
                switch(type){
                    case XmlPullParser.START_DOCUMENT:
                        list = new ArrayList<T>();
                        break;
                    case XmlPullParser.START_TAG:
                        if(tagName.equals(xmlPullParser.getName())){
                            t = clazz.newInstance();
                            Field[] fields = clazz.getDeclaredFields();
                            for(Field field : fields){
                                String fieldName = field.getName();
                                for(int index = 0;index < xmlPullParser.getAttributeCount();index++){
                                    if(fieldName.equals(xmlPullParser.getAttributeName(index))){
                                        ReflectUtil.setFieldValue(t,field,fieldName,xmlPullParser.getAttributeValue(index));
                                    }
                                }
                            }
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        if(tagName.equals(xmlPullParser.getName())){
                            list.add(t);
                        }
                        break;
                    case XmlPullParser.END_DOCUMENT:
                        break;
                }
                type = xmlPullParser.next();
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return list;

    }

    /**
     * 获取Xml文件中的属性值
     * @param xml         xml文件字符串
     * @param tagName        标签名称
     * @param attributeName  属性名称
     * @return   返回获取的值,或者null
     */
    public static String getTagAttribute(String xml, String tagName, String attributeName){
        if(TextUtils.isEmpty(tagName) || TextUtils.isEmpty(attributeName)){
            throw new IllegalArgumentException("请填写标签名称或属性名称");
        }
        XmlPullParser xmlPullParser = Xml.newPullParser();
        InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
        try {
            xmlPullParser.setInput(inputStream, "utf-8");
            int type = xmlPullParser.getEventType();
            while(type != XmlPullParser.END_DOCUMENT){
                switch(type){
                    case XmlPullParser.START_TAG:
                        if(tagName.equals(xmlPullParser.getName())){
                            for(int i=0; i < xmlPullParser.getAttributeCount();i++){
                                if(attributeName.equals(xmlPullParser.getAttributeName(i))){
                                    return xmlPullParser.getAttributeValue(i);
                                }
                            }
                        }
                        break;
                }
                type = xmlPullParser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

 





以上是关于Android-XmlUtil工具类的主要内容,如果未能解决你的问题,请参考以下文章

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

PHP代码-psysh调试代码片段工具

微信小程序代码片段

如何在片段中使用按钮[关闭]

Word 文档的优秀代码片段工具或插件?

前端开发工具vscode如何快速生成代码片段