博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android XStream 解析xml数据变成bean,支持CDATA
阅读量:6470 次
发布时间:2019-06-23

本文共 4762 字,大约阅读时间需要 15 分钟。

参考

1、

2、
3、

实例

留着上一篇retrofit访问webservice后,最后到访问成功,到需要解析CDATA数据为止,继续下面的工作,先看下数据格式吧:

* CDATA具体数据     table_xxxid, codeid, name, pid, remark, inputdate, modifydate, status, type_num            302|302|亚硝酸盐|1|检测项目|2016-08-24 10:58:51.0|null|C|null            ...            472|472|酱油氨基态氮|1|检测项目|2016-08-24 10:58:51.0|null|C|null        
-200 table_yyyid, inputdate, modifydate, decision_basis, max_limit, min_limit, test_basis, unit, food_type, test_item ....
]]>

好吧。。。还需需要利器来解析,XStream来也(其他 SAX-xml,JSoup-html 应该也可以)

1、app 下的build.gradle,添加依赖
compile ('com.thoughtworks.xstream:xstream:1.4.7') {        exclude group: 'xmlpull', module: 'xmlpull'    }
2、xml的bean建立
2.1、@XStreamAlias 根节点
2.2、@XStreamImplicit 子节点
2.3、解释:(1)、子节点是值的话直接用 String xxSameAsElementName 来获取 (2)、子节点里面还有子节点的话用bean来获取,名字可取Element一样的,不一样要注解 (3)、子节点有N个相同的话用List<Bean>来获取,且需要注解子节点

1、第一层:updatedata是根节点,有子节点table且多个,用list<bean>

2、第二层:table下都只有一个个单独元素,是值的话直接用string xxSameAsElment来获取好了,有节点的话用bean
3、第三层:有N个相同数据,标注子节点,且用List<String>来获取

@XStreamAlias("updatedata")//类注解(必须写),根节点public class ZydUpdateDataBean {    @XStreamImplicit(itemFieldName = "table")//节点注解(必须写),有N个用List    private List
tables; public List
getTables() { return tables; } public void setTables(List
tables) { this.tables = tables; } //2 : 每个table下面可以看到有3个元素 public static class ZydTableBean{ String name; String field; ZydValues values; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getField() { return field; } public void setField(String field) { this.field = field; } public ZydValues getValues() { return values; } public void setValues(ZydValues values) { this.values = values; } //3 public static class ZydValues{ @XStreamImplicit(itemFieldName = "value")//节点注解(必须写) private List
valueList; public List
getValueList() { return valueList; } public void setValueList(List
valueList) { this.valueList = valueList; } } }}
3、支持CDATA的XStream工具编写~~直接Copy来
public class XStreamUtil {    public static String PREFIX_CDATA = "";    /**     * 全部转化     */    public static XStream initXStream() {        return new XStream(new XppDriver() {            @Override            public HierarchicalStreamWriter createWriter(Writer out) {                return new PrettyPrintWriter(out) {                    protected void writeText(QuickWriter writer, String text) {                        // if (text.startsWith(PREFIX_CDATA) &&                        // text.endsWith(SUFFIX_CDATA)) {                        writer.write(PREFIX_CDATA + text + SUFFIX_CDATA);                        // } else {                        // super.writeText(writer, text);                        // }                    }                };            }        });    }    /**     * 初始化XStream可支持某一字段可以加入CDATA标签,如果需要某一字段使用原文,就需要在String类型的text的头加上     * ""标签, 以供XStream输出时进行识别     * @param isAddCDATA 是否支持CDATA标签     */    public static XStream initXStream(boolean isAddCDATA) {        XStream xstream = null;        if (isAddCDATA) {            xstream = new XStream(new XppDriver() {                @Override                public HierarchicalStreamWriter createWriter(Writer out) {                    return new PrettyPrintWriter(out) {                        protected void writeText(QuickWriter writer, String text) {                            if (text.startsWith(PREFIX_CDATA) && text.endsWith(SUFFIX_CDATA)) {                                writer.write(text);                            } else {                                super.writeText(writer, text);                            }                        }                    };                }            });        } else {            xstream = new XStream();        }        return xstream;    }}
4、具体解析
//去掉乱七八糟数据updateData = updateData.replace("-200","");//XStream解析器:xml->beanboolean flag = updateData.contains(XStreamUtil.PREFIX_CDATA);XStream xStream = XStreamUtil.initXStream(flag);xStream.processAnnotations(ZydUpdateDataBean.class);ZydUpdateDataBean dataBean = (ZydUpdateDataBean) xStream.fromXML(updateData);

转载地址:http://kfjko.baihongyu.com/

你可能感兴趣的文章
传说FreeBSD等比Linux更稳定,更“健壮”
查看>>
cmake安装MySQL数据库实例
查看>>
朝韩合并的几个好处
查看>>
<05>linux的文本基础操作
查看>>
对Pthread线程进行简单的类封装
查看>>
用户登录程序实现--基于MYSQL (自己导入jar包)
查看>>
Fedora14安装后配置
查看>>
test
查看>>
2014年,什么工作最吃香?数据存储架构师!
查看>>
css 常见的盒模型
查看>>
Linux crontab 命令详解(含配置文件路径)
查看>>
安装rrdtool报错:Can't locate ExtUtils/MakeMaker.pm in @INC
查看>>
scrollView中内部控件的悬停
查看>>
在一个form中有两个submit,值分别为修改和删除,如何在提交时用js判断submit值为修改还是删除呢...
查看>>
flash重点积累
查看>>
寻找第k元
查看>>
PHP极速开发框架LotusAdmin page版发布
查看>>
display属性
查看>>
REVEAL APP for IOS 永久试用
查看>>
雷林鹏分享:PHP 变量
查看>>