最近用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);