SimpleXml使用解析

最近用SimpleXml解析了文件,mark一下常用的几个属性

一.引用

项目里有使用retrofit,retrofit包含了simplexml,所以引用其中的simplexml:

compile('com.squareup.retrofit2:converter-simplexml:2.1.0')

二.注解使用说明

1.@Root(name,strict)

@Root是外层的标签,strict = false 是否精确匹配

2.@Element(name,required)

name是对应标签的名字(如果变量名和xml中匹配可以不用设置)
标签,required = false 非精确匹配

3.@ElementList(entry = "plugin", inline = true, required = true)

1.列表的标签,此标签内包含多个标签
2.entry表示每个子元素的标签名字
3.required = true精确匹配,如果没有会报错
4.inline表示是否内联,官网对其的解释:确定元素列表是否相对于父XML元素
内联。内联元素列表不包含封闭元素。它是元素中一个接一个出现的元素序列。
因此,内联元素列表必须没有名称。

4.@Attribute(name = "name", required = false)

标签内的属性
name是对应属性的名字(如果变量名和xml中匹配可以不用设置)
required = true精确匹配,如果没有会报错

三.simplexml使用

将定好的javabean传进来解析好返回

public static <T> T convertXmlToBean(Class<T> cls, InputStream inputStream) {
    Format format = new Format("<?xml version=\"1.0\" encoding= \"UTF-8\" ?>");
    Serializer serializer = new Persister(format);
    T bean = null;
    try {
        bean = serializer.read(cls, inputStream);//可以传inputStream或file等类型
    } catch (Exception e) {
        Log.e(TAG, "<convert>, e = " + e);
        e.printStackTrace();
    } finally {
        if (bean == null) {
            Log.d(TAG, "convertXmlToBean failed !");
        } else {
            Log.d(TAG, "convertXmlToBean sucessed !");
        }
    }
    return bean;
}

四.demo:

javabean(UpdateInfo.java、PluginInfo.java)如下:

@Root(name = "info", strict = false)
public class UpdateInfo {
    //required = false 非精确匹配
    @Attribute(name = "manifest" , required = false)
    private String manifest;
    @Attribute(name = "versionCode" , required = false)
    private String versionCode;
    @Attribute(name = "versionName" , required = false)
    private String versionName;
    @Attribute(name = "date" , required = false)
    private String date;
    @ElementList(entry = "plugin", inline = true, required = true)
    private List<PluginInfo> pluginInfoList;
}

@Root(name = "plugin", strict = false)
public class PluginInfo {
    @Attribute(name = "type", required = false)
    private String type;
    @Attribute(name = "name", required = false)
    private String name;
    @Attribute(name = "package", required = false)
    private String packageName;
    @Attribute(name = "versionCode", required = false)
    private String versionCode;
    @Attribute(name = "versionName", required = false)
    private String versionName;
    @Attribute(name = "platformBuildVersionName", required = false)
    private String platformBuildVersionName;
    @Attribute(name = "size", required = false)
    private String size;
    @Attribute(name = "md5", required = false)
    private String md5;
}

rom_plugin_info.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<info  manifest="1.0"
	 versionCode="1"
	 versionName="1.0.25"
	 date="2019-1-21 11:00">

	<!-- chesklist begin -->
	<plugin  type="apk"
		 name="com.example.apk"
		 package="com.example"
		 versionCode="15"
		 versionName="1.0.0"
		 platformBuildVersionName="6.0-2166767"
		 size="7623735"
		 md5="23703f232nd239fn33jf83f1baabc"/>

	<plugin  type="plugin"
		 name="com.example.apk"
		 package="com.example"
		 versionCode="20"
		 versionName="1.5.20"
		 platformBuildVersionName="5.0-1521886"
		 size="5096212"
		 md5="agfowr209fw42ljsdhfhrkfjsdfndlll"/>
</info>

调用解析代码如下:

InputStream inputStream = getResources().openRawResource(R.raw.rom_plugin_info);
UpdateInfo updateInfo = ConvertUtil.convertXmlToBean(UpdateInfo.class, inputStream);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值