Pull解析器解析XML文件和生成XML文件

前端之家收集整理的这篇文章主要介绍了Pull解析器解析XML文件和生成XML文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
除了可以使用 SAX或DOM解析XML文件之外,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。
有些时候,我们需要生成一个XML文件生成XML文件方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。
 1 使用代码如下(生成XML文件):
 2 File xmlFile = new File("myitcast.xml");
 3 FileOutputStream outStream = new FileOutputStream(xmlFile);
 4 OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream,"UTF-8");
 5 BufferedWriter writer = new BufferedWriter(outStreamWriter);
 6 writeXML(persons,writer);
 7 writer.flush();
 8 writer.close();
 9 如果只想得到生成的xml字符串内容,可以使用StringWriter:
10 StringWriter writer = new StringWriter();
11 writeXML(persons,writer);
12 String content = writer.toString();
  相关代码
  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"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

猜你在找的XML相关文章