一.最近突然有一个需求需要使用xml解析,很懵这玩意都很多年没有用了.没办法搞呗.首先这边讲解的是xml解析部分。

android如何读取xml android解析xml字符串_xml

可以看到这边这个字符串是后台给我返回的一个 xml,接下来我们就要对它进行操作了.

String confXml = protocol0x0825.getConfXml();
                        Log.i("阿狸:--0x0825", confXml);
                        //因为解析很多都是解析xml文件的,既然咱要解析这个字符串就需要先把转换成流的形式
                        InputStream in = new ByteArrayInputStream(confXml.getBytes("UTF-8"));//如果出现乱码,就用你的框架的编码如utf-8
                        //这边我们写了一个工具类调用这个流
                        persons = getPersons(in);
                        //判断这边的集合不等于空的情况下把这个list添加到我们的主list里面然后刷新适配器
                        if (persons != null) {
                            //添加到集合里面
                            list.addAll(persons);
                            //刷新适配器
                            adapter.notifyDataSetChanged();
                        }

好了接下来我们看一下这个工具类里面做了什么操作呢. 工具类是我根据我这边的参数设置的,要适用的话记得改一下下面的判断,然后就可以直接搬过来用了.

/**
     * 采用PULL解析XML内容
     */

    public List<ConfInfo> getPersons(InputStream inputStream) throws Exception {
        List<ConfInfo> persons = null;
        ConfInfo person = null;
        //得到PULL解析器
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(inputStream, "UTF-8");
        //产生事件
        int eventType = parser.getEventType();
        //如果不是文档结束事件就循环推进
        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT://开始文档事件
                    persons = new ArrayList<>();
                    break;
                case XmlPullParser.START_TAG://开始元素事件
                    //获取解析器当前指向的元素的名称
                    String name = parser.getName();
                    //我这边这些参数都在conf下面
                    if ("conf".equals(name)) {
                        person = new ConfInfo();
                        //因为我这边只要五个参数 这边这个取值是根据索引进行取的
                        person.setConfID(parser.getAttributeValue(0));
                        person.setConfName(parser.getAttributeValue(1));
                        person.setConfPwd(parser.getAttributeValue(2));
                        person.setAdminName(parser.getAttributeValue(6));
                        person.setIsPublic(parser.getAttributeValue(8));
                    }
                    break;
                case XmlPullParser.END_TAG://结束元素事件
                    //判断是都是person的结束事件
                    if ("conf".equals(parser.getName())) {
                        //结束的时候添加到集合里面
                        persons.add(person);
                        person = null;
                    }
                    break;
            }
            //进入下一个元素并触发相应的事件
            eventType = parser.next();
        }
        //返回
        return persons;
    }

二.到这里解析已经完事了,接下来讲一下xml转对象. 首先创建数据的实体类

package elink.mobile.im.bean;

import elink.mobile.im.bean.CreateMeeti;

/**
 * author : 白月初
 * e-mail : anleiya@163.com
 * date   : 2021/4/2914:30
 * desc   :
 * version: 1.0
 */
public class Meeti {
    private CreateMeeti conf;

    public CreateMeeti getConf() {
        return conf;
    }

    public void setConf(CreateMeeti conf) {
        this.conf = conf;
    }
}

这边有俩个实体类 因为外层有包裹参数

package elink.mobile.im.bean;

/**
 * author : 白月初
 * e-mail : anleiya@163.com
 * date   : 2021/4/2817:59
 * desc   :
 * version: 1.0
 */
public class CreateMeeti {
        //1.会议名称
        private String confName;
        // 2.会议id parentConfID="0"
        private String parentConfID;
        //3.会议密码
        private String confPwd;
        //4.结束时间
        private String endTime;
        //5.开始时间
        private String startTime;
        //6.是否匿名  isPublic="0"
        private String isPublic;
        //7.参加会议人id
        private String users;
        //8.发起会议人name
        private String adminName;
        //9.会议摘要
        private String confDesc;

    public void setConfName(String confName) {
        this.confName = confName;
    }

    public void setParentConfID(String parentConfID) {
        this.parentConfID = parentConfID;
    }

    public void setConfPwd(String confPwd) {
        this.confPwd = confPwd;
    }

    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public void setIsPublic(String isPublic) {
        this.isPublic = isPublic;
    }

    public void setUsers(String users) {
        this.users = users;
    }

    public void setAdminName(String adminName) {
        this.adminName = adminName;
    }

    public void setConfDesc(String confDesc) {
        this.confDesc = confDesc;
    }

    public String getConfName() {
        return confName;
    }

    public String getParentConfID() {
        return parentConfID;
    }

    public String getConfPwd() {
        return confPwd;
    }

    public String getEndTime() {
        return endTime;
    }

    public String getStartTime() {
        return startTime;
    }

    public String getIsPublic() {
        return isPublic;
    }

    public String getUsers() {
        return users;
    }

    public String getAdminName() {
        return adminName;
    }

    public String getConfDesc() {
        return confDesc;
    }

    @Override
    public String toString() {
        return "CreateMeeti{" +
                "confName='" + confName + '\'' +
                ", parentConfID='" + parentConfID + '\'' +
                ", confPwd='" + confPwd + '\'' +
                ", endTime='" + endTime + '\'' +
                ", startTime='" + startTime + '\'' +
                ", isPublic='" + isPublic + '\'' +
                ", users='" + users + '\'' +
                ", adminName='" + adminName + '\'' +
                ", confDesc='" + confDesc + '\'' +
                '}';
    }
}

下面是怎么去使用

//实体类
 			CreateMeeti meeti=new CreateMeeti();
 			//把要转换xml的参数放到实体类里面
            meeti.setConfName(confName);
            meeti.setParentConfID(parentConfID);
            meeti.setConfPwd(confPwd);
            meeti.setEndTime(endTime);
            meeti.setStartTime(startTime);
            meeti.setIsPublic(isPublic);
            meeti.setUsers(users);
            meeti.setAdminName(adminName);
            meeti.setConfDesc(confDesc);
			//这个方法是一个java转换xml的一个libs插件
            XStream xStream = new XStream();
            //创建最外层的实体类
            Meeti conf = new Meeti();
            //把我们需要添加的参数实体类放进去
            conf.setConf(meeti);
            //最外层是confs 所以这里写这个
            xStream.alias("confs", Meeti.class);
            
			//然后添加内层参数
            xStream.useAttributeFor(CreateMeeti.class,"confName");
            xStream.useAttributeFor(CreateMeeti.class,"parentConfID");
            xStream.useAttributeFor(CreateMeeti.class,"confPwd");
            xStream.useAttributeFor(CreateMeeti.class,"endTime");
            xStream.useAttributeFor(CreateMeeti.class,"startTime");
            xStream.useAttributeFor(CreateMeeti.class,"isPublic");
            xStream.useAttributeFor(CreateMeeti.class,"users");
            xStream.useAttributeFor(CreateMeeti.class,"adminName");
            xStream.useAttributeFor(CreateMeeti.class,"confDesc");
			//添加完以后这里toXmL就可以转换成一个字符串了
			//这个字符串里面就是我们想要的xml
			//得到xml文件
            String string2 = xStream.toXML(conf);
            Log.i("阿狸:string2--",string2);

这里可以看到我们已经转换成功了,接下来看我们需要怎么处理

android如何读取xml android解析xml字符串_android如何读取xml_02

XStream 这个libs插件 推荐使用xstream-1.4.7版本的,因为这东西比较老了 这边提供了下载地址可以去下载添加.

android如何读取xml android解析xml字符串_java_03

点击下载 XStream插件 提取码:7fz5