Pull解析器解析XML文件和生成XML文件
发布时间:2020-12-16 09:29:02 所属栏目:百科 来源:网络整理
导读:除了可以使用 SAX或DOM解析XML文件之外,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所
相关代码:
PersonService.java
1 public class PersonService { 2 private Context context; 3 4 public PersonService(Context context) { 5 this.context = context; 6 } 7 8 /** 9 * 把person.xml的输入流 解析 转化成list集合 10 * @param filename assets目录下的文件名 11 * @return 12 */ 13 public List<Person> getPersons(String filename){ 14 AssetManager manager = context.getAssets(); 15 try { 16 InputStream is = manager.open(filename); 17 //在android下使用pull解析xml文件 18 //1.获取pull解析器的实例 19 XmlPullParser parser = Xml.newPullParser(); 20 //2.设置解析器的一些参数 21 parser.setInput(is,"utf-8"); 22 // 获取pull解析器对应的事件类型 23 int type = parser.getEventType(); 24 Person person = null; 25 List<Person> persons = new ArrayList<Person>(); 26 while(type!=XmlPullParser.END_DOCUMENT){ 27 28 if(type==XmlPullParser.START_TAG){ 29 if("person".equals(parser.getName())){ 30 person = new Person(); 31 int id =Integer.parseInt( parser.getAttributeValue(0)); 32 person.setId(id); 33 }else if("name".equals(parser.getName())){ 34 String name = parser.nextText(); 35 person.setName(name); 36 }else if("age".equals(parser.getName())){ 37 int age = Integer.parseInt( parser.nextText()); 38 person.setAge(age); 39 } 40 } 41 if(type==XmlPullParser.END_TAG){ 42 if("person".equals(parser.getName())){ 43 persons.add(person); 44 person = null; 45 } 46 } 47 48 49 type = parser.next(); 50 } 51 52 return persons; 53 54 55 } catch (Exception e) { 56 e.printStackTrace(); 57 Toast.makeText(context,"获取person.xml失败",Toast.LENGTH_SHORT).show(); 58 return null; 59 } 60 } 61 62 /** 63 * 把persons集合里面的内容写到xml文件里面 64 * @param persons person的集合 65 * @return 66 */ 67 public boolean savePersonToXml(List<Person> persons){ 68 try { 69 XmlSerializer serializer = Xml.newSerializer(); 70 // /sdcard/person.xml 71 // mount unmount 文件系统的权限 72 File file = new File(Environment.getExternalStorageDirectory(),"person.xml"); 73 FileOutputStream fos = new FileOutputStream(file); 74 serializer.setOutput(fos,"utf-8"); 75 serializer.startDocument("utf-8",true); 76 serializer.startTag(null,"persons"); 77 for(Person person:persons){ 78 serializer.startTag(null,"person"); 79 80 serializer.attribute(null,"id",person.getId()+""); 81 82 serializer.startTag(null,"name"); 83 serializer.text(person.getName()); 84 serializer.endTag(null,"name"); 85 86 serializer.startTag(null,"age"); 87 serializer.text(person.getAge()+""); 88 serializer.endTag(null,"age"); 89 90 91 serializer.endTag(null,"person"); 92 } 93 serializer.endTag(null,"persons"); 94 serializer.endDocument(); 95 fos.flush(); 96 fos.close(); 97 return true; 98 } catch (Exception e) { 99 e.printStackTrace(); 100 return false; 101 } 102 103 104 } 105 106 } MainActivity.java 1 public class MainActivity extends Activity { 2 /** Called when the activity is first created. */ 3 @Override 4 public void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.main); 7 TextView tv = (TextView) this.findViewById(R.id.tv); 8 PersonService service = new PersonService(this); 9 List<Person> persons = service.getPersons("person.xml"); 10 StringBuffer sb = new StringBuffer(); 11 for(Person person : persons){ 12 String age = "年龄"+ person.getAge(); 13 String name =person.getName(); 14 String id = "id="+ person.getId(); 15 sb.append(name +" "+ age+" "+id); 16 } 17 tv.setText( sb.toString()); 18 } 19 }
注意:写到sd卡中去,需要添加以下权限
a)如何用api写sd卡,new File(Environment.getExternalStorageDirectory(),"person.xml")最好将下面两个权限都添加
b)直接写出sd卡的路径,/sdcard/person.xml,只需要写sd卡的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |