ReflectResolveXML.java

Java代码 收藏代码
  1. packagecom.player.handle;
  2. importjava.lang.reflect.Field;
  3. importjava.text.ParseException;
  4. importjava.text.SimpleDateFormat;
  5. importjava.util.Collection;
  6. importjava.util.Date;
  7. importjava.util.Stack;
  8. importorg.xml.sax.Attributes;
  9. importorg.xml.sax.SAXException;
  10. importorg.xml.sax.helpers.DefaultHandler;
  11. publicclassReflectResolveXMLextendsDefaultHandler{
  12. publicstaticfinalStringT_COLLECTION="collection";
  13. publicstaticfinalStringT_OBJECT="object";
  14. publicstaticfinalStringT_LANG="lang";
  15. privatestaticfinalStringT_DATE="date";
  16. privatestaticfinalStringD_PATTERN="yyyy-MM-ddHH:mm:ss";
  17. Stack<Object>stack=newStack<Object>();
  18. privateObjectroot=null;
  19. publicObjectgetRoot(){
  20. returnroot;
  21. }
  22. @Override
  23. publicvoidendElement(Stringuri,StringlocalName,StringqName)
  24. throwsSAXException{
  25. //System.out.println("endElement:"+uri+"localName:"+localName+"qName:"+qName);
  26. if(qName.equals(T_OBJECT)||qName.equals(T_COLLECTION)){
  27. //如果集合类或者object类属性注入完成则需要弹出堆栈
  28. stack.pop();
  29. }
  30. }
  31. @Override
  32. publicvoidstartElement(Stringuri,StringlocalName,StringqName,
  33. Attributesattributes)throwsSAXException{
  34. //TODOAuto-generatedmethodstu
  35. StringBufferstb=newStringBuffer();
  36. for(inti=0;i<attributes.getLength();i++){
  37. stb.append(attributes.getValue(i)+"---");
  38. }
  39. System.out.println("startElement:"+uri+"localName:"+localName+"qName:"+qName+"Attr:"+stb.toString());
  40. //如果根元素为null则新建一个因为第一个读取的必定是根元素
  41. Stringtype=attributes.getValue("type");
  42. if(root==null){
  43. root=instanceObjectByType(type);
  44. stack.push(root);
  45. return;
  46. }
  47. Stringvalue=attributes.getValue("value");
  48. Stringname=attributes.getValue("name");
  49. ObjectpObj=stack.peek();
  50. //根元素不为空则根据qname判断
  51. if(qName.equals(T_COLLECTION)||qName.equals(T_OBJECT)){
  52. //如果是list则new一个list或者object则new出来
  53. Objectobj=instanceObjectByType(type);
  54. stack.push(obj);
  55. injectToParent(pObj,obj,name);
  56. }elseif(qName.equals(T_LANG)){
  57. //如果是lang则需要转化value值
  58. ObjectvalueObj=typeConvert(type,value);
  59. injectToParent(pObj,valueObj,name);
  60. }elseif(qName.equals(T_DATE)){
  61. //如果是date
  62. Stringpattern=attributes.getValue("pattern");
  63. if(pattern==null){
  64. pattern=D_PATTERN;
  65. }
  66. ObjectvalueObj=typeConvertDate(value,pattern);
  67. injectToParent(pObj,valueObj,name);
  68. }
  69. }
  70. //转化date类型
  71. privateDatetypeConvertDate(Stringvalue,Stringpattern){
  72. SimpleDateFormatsdf=newSimpleDateFormat(pattern);
  73. Datedate;
  74. try{
  75. date=sdf.parse(value);
  76. returndate;
  77. }catch(ParseExceptione){
  78. //TODOAuto-generatedcatchblock
  79. e.printStackTrace();
  80. }
  81. returnnull;
  82. }
  83. //向上一级元素中注入属性或者向集合类中add子元素
  84. privatevoidinjectToParent(ObjectpObj,ObjectfieldValue,StringfieldName){
  85. if(pObjinstanceofCollection){
  86. //如果上一级是集合类则需要添加进去
  87. ((Collection)pObj).add(fieldValue);
  88. return;
  89. }
  90. //如果上一级是object则需要反射字段赋值
  91. Field[]fields=pObj.getClass().getDeclaredFields();
  92. for(Fieldfield:fields){
  93. if(field.getName().equals(fieldName)){
  94. try{
  95. field.setAccessible(true);
  96. field.set(pObj,fieldValue);
  97. }catch(IllegalArgumentExceptione){
  98. //TODOAuto-generatedcatchblock
  99. e.printStackTrace();
  100. }catch(IllegalAccessExceptione){
  101. //TODOAuto-generatedcatchblock
  102. e.printStackTrace();
  103. }
  104. break;
  105. }
  106. }
  107. }
  108. //反射实例化对象
  109. privateObjectinstanceObjectByType(StringqName){
  110. try{
  111. ClasslocalClass=Class.forName(qName);
  112. Objectobj=localClass.getConstructor().newInstance();
  113. returnobj;
  114. }catch(Exceptione){
  115. //TODOAuto-generatedcatchblock
  116. e.printStackTrace();
  117. thrownewRuntimeException(e);
  118. }
  119. }
  120. //此方法用于将一个字符串转换为相应的数据类型
  121. publicObjecttypeConvert(StringclassName,Stringvalue){
  122. if(className.equals("java.lang.String")){
  123. returnvalue;
  124. }elseif(className.equals("java.lang.Integer")){
  125. returnInteger.valueOf(value);
  126. }elseif(className.equals("java.lang.Long")){
  127. returnLong.valueOf(value);
  128. }elseif(className.equals("java.lang.Boolean")){
  129. returnBoolean.valueOf(value);
  130. }elseif(className.equals("java.lang.Float")){
  131. returnFloat.valueOf(value);
  132. }elseif(className.equals("java.lang.Double")){
  133. returnDouble.valueOf(value);
  134. }else
  135. returnnull;
  136. }
  137. }

reflect.xml文件

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <collectontype="java.util.ArrayList">
  3. <objecttype="com.player.module.Resource">
  4. <langtype="java.lang.String"name="id"value="0001"></lang>
  5. <objecttype="com.player.module.Mp3"name="mp3">
  6. <langtype="java.lang.String"name="mp3Name"value="天地初开的时候.mp3"></lang>
  7. <langtype="java.lang.Integer"name="mp3Size"value="12333"></lang>
  8. </object>
  9. <objecttype="com.player.module.Lrc"name="lrc">
  10. <langtype="java.lang.String"name="lrcName"value="天地初开的时候.lrc"></lang>
  11. <langtype="java.lang.Integer"name="lrcSize"value="4312"></lang>
  12. </object>
  13. <datetype="java.util.Date"name="date"value="2001-12-1212:12:12"></date>
  14. </object>
  15. <objecttype="com.player.module.Resource">
  16. <langtype="java.lang.String"name="id"value="0002"></lang>
  17. <objecttype="com.player.module.Mp3"name="mp3">
  18. <langtype="java.lang.String"name="mp3Name"value="那一曲盛放的玫瑰.mp3"></lang>
  19. <langtype="java.lang.Integer"name="mp3Size"value="12333"></lang>
  20. </object>
  21. <objecttype="com.player.module.Lrc"name="lrc">
  22. <langtype="java.lang.String"name="lrcName"value="那一曲盛放的玫瑰.lrc"></lang>
  23. <langtype="java.lang.Integer"name="lrcSize"value="4312"></lang>
  24. </object>
  25. <datetype="java.util.Date"name="date"value="2001-12-1312:12:12"></date>
  26. </object>
  27. </collecton>

HandleTest.java

Java代码 收藏代码
  1. packagecom.player.handle;
  2. importjava.io.File;
  3. importjava.io.IOException;
  4. importjava.util.List;
  5. importjavax.xml.parsers.ParserConfigurationException;
  6. importjavax.xml.parsers.SAXParser;
  7. importjavax.xml.parsers.SAXParserFactory;
  8. importorg.junit.Test;
  9. importorg.xml.sax.SAXException;
  10. importcom.player.module.Resource;
  11. publicclassHandleTest{
  12. @Test
  13. publicvoidtestresolveXmlTest()throwsParserConfigurationException,SAXException,IOException{
  14. //HttpDownloaderdownloader=newHttpDownloader();
  15. //Stringxml=downloader.download(Mp3ListActiviy.URL);
  16. Filefile=newjava.io.File("D:\\Soft\\Program\\Apache-Tomcat-6.0.20\\webapps\\android_mp3\\reflect.xml");
  17. SAXParsersaxParser=SAXParserFactory.newInstance().newSAXParser();
  18. ReflectResolveXMLreflectResolveXML=newReflectResolveXML();
  19. saxParser.parse(file,reflectResolveXML);
  20. List<Resource>resources=(List<Resource>)reflectResolveXML.getRoot();
  21. System.out.println("---------------------");
  22. for(Resourceresource:resources){
  23. System.out.println(resource.toString());
  24. }
  25. //mp3xmlHandle.getMp3List();
  26. }
  27. }

三个javabean

Java代码 收藏代码
  1. publicclassLrc{
  2. privateStringlrcName;
  3. privateIntegerlrcSize;
  4. }
  5. publicclassMp3{
  6. privateStringmp3Name;
  7. privateintmp3Size;
  8. }
  9. publicclassResource{
  10. privateStringid;
  11. privateMp3mp3;
  12. privateLrclrc;
  13. privateDatedate;
  14. }

更多相关文章

  1. android典型代码系列(三十)------DES加密算法
  2. 使用 Android NDK 重用现有的 C 代码
  3. 修改Android的开关机铃声、Android开关机画面与动画(附代码流程)
  4. Android 初学入门代码注释 学习笔记001 16.03.18
  5. Android实训所学功能实现代码集合
  6. Android自动更新代码
  7. android代码实现自动关机

随机推荐

  1. Android(安卓)Cache Partition
  2. Android(安卓)Studio UI布局
  3. 《Android(安卓)基础(十)》FloatingActionB
  4. Android(安卓)初学入门代码注释 学习笔记
  5. android View onMeasure
  6. android代码实现自动关机
  7. Android中获取电池电量
  8. java android MD5加密
  9. android widget桌面时钟
  10. Android(安卓)Development Notes-2