浏览 4124 次
锁定老帖子 主题:做了个xml小工具
精华帖 (1) :: 良好帖 (3) :: 新手帖 (12) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-27
最后修改:2010-05-27
因为需要在android手机上面解析xml,而现有的xml库大多都比较大,而且我需要的功能也比较少,所以就自己实现了一个。同时也熟悉了一下注解的运用,这个工具就只有两个功能: 1.将javabean转换成String类型的对象以便网络传输 2.将String类型对象转换成javabean以便操作方便 所有代码只有4个类,代码我就不贴了,发一下测试代码,想研究的可以下载来看看
package test; import java.util.ArrayList; import cn.infogiga.util.xml.XMLBean; import cn.infogiga.util.xml.XMLElement; import cn.infogiga.util.xml.XMLField; import cn.infogiga.util.xml.XMLTypes; /** * value表示这个节点名称 type=XMLTypes.XML_ROOT表示这是根节点 * 如果不是根节点 输出的xml没有xml头:<?xml version='1.0' encoding='UTF-8'?> * @author cindy */ @XMLElement(value="BeanA",type=XMLTypes.XML_ROOT) public class BeanA extends XMLBean{ /** * value表示节点名称,XMLTypes.XML_ELEMENT表示这是普通节点 */ @XMLField(value="Field1",xmlType=XMLTypes.XML_ELEMENT) private String flied1; @XMLField(value="Field2",xmlType=XMLTypes.XML_ELEMENT) private String fleld2; @XMLField(value="Field3",xmlType=XMLTypes.XML_ELEMENT) private String field3; /** * xmlType=XMLTypes.XML_LIST表示这是多个重复节点,这里一定要是ArrayList 如果是List则会报错 * 如果xmlType=XMLTypes.XML_LIST 那么mClass=BeanB.class 这个一定要添加,初始化是需要用到,没有什么意义 * 如果value="beanBs"省略则输出的xml将会有变化: * 有value="beanBs"输出的字符串: * <?xml version='1.0' encoding='UTF-8'?> <BeanA> <Field1>111111</Field1> <Field2>222222</Field2> <beanBs> <BeanB> <Field1>b33333</Field1> </BeanB> <BeanB> <Field1>b44444</Field1> </BeanB> </beanBs> </BeanA> * 没有value="beanBs"输出的字符串: <?xml version='1.0' encoding='UTF-8'?> <BeanA> <Field1>111111</Field1> <Field2>222222</Field2> <Field3>333333</Field3> <BeanB> <str2>b33333</str2> </BeanB> <BeanB> <str2>b44444</str2> </BeanB> </BeanA> */ @XMLField(value="beanBs",xmlType=XMLTypes.XML_LIST,mClass=BeanB.class) private ArrayList<BeanB> beanBs; public ArrayList<BeanB> getBeanBs() { return beanBs; } public void setBeanBs(ArrayList<BeanB> beanBs) { this.beanBs = beanBs; } public String getFlied1() { return flied1; } public void setFlied1(String flied1) { this.flied1 = flied1; } public String getFleld2() { return fleld2; } public void setFleld2(String fleld2) { this.fleld2 = fleld2; } public String getField3() { return field3; } public void setField3(String field3) { this.field3 = field3; } }
package test; import cn.infogiga.util.xml.XMLBean; import cn.infogiga.util.xml.XMLElement; import cn.infogiga.util.xml.XMLField; import cn.infogiga.util.xml.XMLTypes; @XMLElement(value="BeanB",type=XMLTypes.XML_UNROOT) public class BeanB extends XMLBean{ @XMLField(value="str2",xmlType=XMLTypes.XML_ELEMENT) private String str2; public String getStr2() { return str2; } public void setStr2(String str2) { this.str2 = str2; } }
package test; import java.util.ArrayList; import java.util.List; public class TestMain2 { /** * @param args */ public static void main(String[] args) { BeanA ba = new BeanA(); ba.setFlied1("111111"); ba.setFleld2("222222"); ba.setField3("333333"); ArrayList<BeanB> bList = new ArrayList<BeanB>(); BeanB b = new BeanB(); b.setStr2("b33333"); bList.add(b); BeanB c = new BeanB(); c.setStr2("b44444"); bList.add(c); ba.setBeanBs(bList); System.out.println(ba.toString()); } }
package test; import java.util.ArrayList; public class TestMain3 { /** * @param args */ public static void main(String[] args) { /*// TODO Auto-generated method stub BeanA beanA = new BeanA(); beanA.getBeanBs().getClass();*/ String xml = "<?xml version='1.0' encoding='UTF-8'?><BeanA><Field1>111111</Field1><Field2>222222</Field2><Field3>333333</Field3><beanBs><BeanB><str2>b33333</str2></BeanB><BeanB><str2>b44444</str2></BeanB></beanBs></BeanA>"; BeanA beanA = new BeanA(); try { beanA.parse(xml); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(beanA.getFlied1()); System.out.println(beanA.getFleld2()); System.out.println(beanA.getField3()); ArrayList<BeanB> l = beanA.getBeanBs(); if(l != null){ for(int i=0;i<l.size();i++){ BeanB b = l.get(i); System.out.println(b.getStr2()); } } } } 添加了点简单的注释 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-27
应该有良好的注释。。。
|
|
返回顶楼 | |
发表时间:2010-05-28
支持原创, 不过不知道LZ有没有用过simpleframework,本人一直用simpleframework,LZ有时间的话可以看一看。
|
|
返回顶楼 | |
发表时间:2010-05-28
yschen 写道 支持原创, 不过不知道LZ有没有用过simpleframework,本人一直用simpleframework,LZ有时间的话可以看一看。
大致的看了下simpleframework,不过可惜似乎不再更新了,有时间研究一下源码 |
|
返回顶楼 | |
发表时间:2010-05-29
把JavaBean序列化后不久可以直接传输了,干嘛要转
|
|
返回顶楼 | |
发表时间:2010-05-29
最后修改:2010-05-29
hzh86316 写道 把JavaBean序列化后不久可以直接传输了,干嘛要转
当然你这个思路也是可行的,但是有时你的程序需要和某个特定的另一个程序对接,而那个程序的接口格式已经设定好了,你只能按照那种格式来,我做这个原本是为了方便和浙江移动boss对接,而通信格式就是xml,协议是http协议。运用xml这类内容载体来传输信息最大的好处就是不需要考虑平台的差异性,如果用javaBean序列化传输的话是不是已经规定死双方平台都只能用java了呢? |
|
返回顶楼 | |