加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PULL解析XML

发布时间:2020-12-16 00:34:23 所属栏目:百科 来源:网络整理
导读:Android中常见的xml解析方式有sax、dom和pull,下面我们就看一个小巧轻便,解析方便,速度很快的pull方式的实例。 先建一个xml吧:mission.xml [html] view plain copy ? xml version = "1.0" encoding = "UTF-8" ? region id = "region_1" width = "100" he
Android中常见的xml解析方式有sax、dom和pull,下面我们就看一个小巧轻便,解析方便,速度很快的pull方式的实例。

先建一个xml吧:mission.xml
[html] view plain copy
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <regionid="region_1"width="100"height="800">
  3. <elementid="1"type="20">Chinese</element>
  4. <elementid="2"type="20">English</element>
  5. </region>

建region的实体: Region.java
[java] view plain copy
  1. packagecom.hebaijun.xmlparser;
  2. importjava.util.List;
  3. publicclassRegion{
  4. privateStringid;
  5. privateintwidth;
  6. privateintheight;
  7. privateList<Element>elements;
  8. publicStringgetId(){
  9. returnid;
  10. }
  11. publicvoidsetId(Stringid){
  12. this.id=id;
  13. }
  14. publicintgetWidth(){
  15. returnwidth;
  16. }
  17. publicvoidsetWidth(intwidth){
  18. this.width=width;
  19. }
  20. publicintgetHeight(){
  21. returnheight;
  22. }
  23. publicvoidsetHeight(intheight){
  24. this.height=height;
  25. }
  26. publicList<Element>getElements(){
  27. returnelements;
  28. }
  29. publicvoidsetElements(List<Element>elements){
  30. this.elements=elements;
  31. }
  32. }

Element的实体:Element.java
[java] view plain copy
  1. packagecom.hebaijun.xmlparser;
  2. publicclassElement{
  3. privateStringid;
  4. privateStringtype;
  5. privateStringvalue;
  6. publicStringgetId(){
  7. returnid;
  8. }
  9. publicvoidsetId(Stringid){
  10. this.id=id;
  11. }
  12. publicStringgetType(){
  13. returntype;
  14. }
  15. publicvoidsetType(Stringtype){
  16. this.type=type;
  17. }
  18. publicStringgetValue(){
  19. returnvalue;
  20. }
  21. publicvoidsetValue(Stringvalue){
  22. this.value=value;
  23. }
  24. }

最后是实例代码:
[java] view plain copy
  1. packagecom.hebaijun.xmlparser;
  2. importjava.io.File;
  3. importjava.io.FileInputStream;
  4. importjava.io.IOException;
  5. importjava.io.InputStream;
  6. importjava.util.ArrayList;
  7. importjava.util.List;
  8. importorg.xmlpull.v1.XmlPullParser;
  9. importorg.xmlpull.v1.XmlPullParserException;
  10. importorg.xmlpull.v1.XmlPullParserFactory;
  11. importandroid.app.Activity;
  12. importandroid.os.Bundle;
  13. importandroid.util.Log;
  14. publicclassXmlParserActivityextendsActivity{
  15. /**Calledwhentheactivityisfirstcreated.*/
  16. Regionregion;
  17. @Override
  18. publicvoidonCreate(BundlesavedInstanceState){
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.main);
  21. //取xml的路径
  22. StringxmlPath=getExternalStoragePath()+"/mission.xml";
  23. try{
  24. region=parser(xmlPath);
  25. }catch(XmlPullParserExceptione){
  26. e.printStackTrace();
  27. }catch(IOExceptione){
  28. e.printStackTrace();
  29. }
  30. //打印一些结果
  31. Log.v("region_id",region.getId());
  32. for(Elementelement:region.getElements()){
  33. Log.v("element_value",element.getValue());
  34. }
  35. }
  36. //获取sdcard路径
  37. publicstaticStringgetExternalStoragePath(){
  38. //获取状态
  39. Stringstate=android.os.Environment.getExternalStorageState();
  40. //判断是否可读
  41. if(android.os.Environment.MEDIA_MOUNTED.equals(state)){
  42. if(android.os.Environment.getExternalStorageDirectory().canRead()){
  43. returnandroid.os.Environment.getExternalStorageDirectory().getPath();
  44. }
  45. }
  46. returnnull;
  47. }
  48. publicRegionparser(Stringpath)throwsXmlPullParserException,IOException{
  49. FilexmlFile=newFile(path);
  50. ElementxmlElement=null;
  51. List<Element>xmlElements=null;
  52. RegionxmlRegion=null;
  53. if(xmlFile.exists()){
  54. InputStreamslideInputStream=newFileInputStream(path);
  55. XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
  56. factory.setNamespaceAware(true);
  57. XmlPullParserxpp=factory.newPullParser();
  58. xpp.setInput(slideInputStream,"UTF-8");
  59. inteventType=xpp.getEventType();
  60. while(eventType!=XmlPullParser.END_DOCUMENT){
  61. if(eventType==XmlPullParser.START_DOCUMENT){
  62. }elseif(eventType==XmlPullParser.START_TAG){
  63. StringstartName=xpp.getName();
  64. if(startName.equalsIgnoreCase("region")){
  65. xmlRegion=newRegion();
  66. xmlElements=newArrayList<Element>();
  67. intcount=xpp.getAttributeCount();
  68. for(inti=0;i<count;i++){
  69. Stringname=xpp.getAttributeName(i);
  70. Stringvalue=xpp.getAttributeValue(i);
  71. if(name.equalsIgnoreCase("id")){
  72. xmlRegion.setId(value);
  73. }elseif(name.equalsIgnoreCase("width")){
  74. xmlRegion.setWidth(Integer.parseInt(value));
  75. }elseif(name.equalsIgnoreCase("height")){
  76. xmlRegion.setHeight(Integer.parseInt(value));
  77. }
  78. }
  79. }elseif(startName.equalsIgnoreCase("element")){
  80. xmlElement=newElement();
  81. intcount=xpp.getAttributeCount();
  82. for(inti=0;i<count;i++){
  83. Stringname=xpp.getAttributeName(i);
  84. Stringvalue=xpp.getAttributeValue(i);
  85. if(name.equalsIgnoreCase("id")){
  86. xmlElement.setId(value);
  87. }elseif(name.equalsIgnoreCase("type")){
  88. xmlElement.setType(value);
  89. }
  90. }
  91. //元素的text值
  92. xpp.next();
  93. xmlElement.setValue(xpp.getText());
  94. }
  95. }elseif(eventType==XmlPullParser.END_TAG){
  96. StringendName=xpp.getName();
  97. if(endName.equalsIgnoreCase("region")){
  98. if(xmlElements!=null){
  99. xmlRegion.setElements(xmlElements);
  100. }
  101. }elseif(endName.equalsIgnoreCase("element")){
  102. xmlElements.add(xmlElement);
  103. }
  104. }
  105. //下一个元素
  106. eventType=xpp.next();
  107. }
  108. //关闭输入流
  109. if(slideInputStream!=null){
  110. slideInputStream.close();
  111. slideInputStream=null;
  112. }
  113. }
  114. returnxmlRegion;
  115. }
  116. }



PS: XML中notice貌似是关键字,如果有的话,会导致失败 提示attr value delimiter missing!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读