Pull 解析/生成 XML文档

前端之家收集整理的这篇文章主要介绍了Pull 解析/生成 XML文档前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Android内置的XML解析器,运行方式与SAX类似,提供了如开始元素和结束元素等事件。
使用parser.next()可进入下一个元素并触发相应事件,可使用一个switch对感兴趣的事件进行选择和处理。
调用parser.nextText()获取下一个Text类型元素的值。
可在www.xmlpull.org下载Pull解析器源码和文档。
【特点】结构简单(一个借口,一个例外,一个工厂组成);
简单易用(只用一个重要方法next()检索下一个事件,
5个事件:START_DOCUMENT,START_TAG,TEXT,END_TAG,END_DOCUMENT);
功能性,最小的需求
使用步骤:
①:针对从XML中获取到的信息,需对其建立一个对象(例:Person),存放相关信息
②:由Xml.newPullParser()创建XmlPullParser
③:设置资源并指定解析编码 pullParser.setInput(is,"UTF-8");
④:测试需要,建立一个person.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<persons>
<person id="23">
<name>Test</name>
<age>21</age>
</person>
</persons>
⑤:在应用中通过
InputStream is = MainActivity.class.getClassLoader().getResourceAsStream("person.xml");
加载需要解析的文件


*****************************
⑥:生成(保存)xml文档:
通过Xml.newSerializer()获取XmlSerializer序列生成
设置编码:xSerializer.setOutput(outputStream,"UTF-8");
xSerializer.startDocument("UTF-8",true);
建立File,以OutputStream形式进行生成




【附】:android应用单元测试方法
①:在AndroidManifest.xml中添加节点
<uses-library android:name="android.test.runner" />
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.gzu.xmlparsertest" />
②:建立测试类继承AndroidTestCase


【源代码如下:】
*/
/****************************************【源码】START**************************************************/

//1.Person.java

  1. public class Person {
  2. private Integer id;
  3. private String name;
  4. private short age;
  5. public Person() {
  6. super();
  7. }
  8. public Person(String name,short age) {
  9. super();
  10. this.name = name;
  11. this.age = age;
  12. }
  13. public Person(Integer id,String name,short age) {
  14. super();
  15. this.id = id;
  16. this.name = name;
  17. this.age = age;
  18. }
  19. // getter and setter ...
  20. }

//2.PullParseService.java
  1. public class PullParseService {
  2. /** Pull 解析Xml文档 */
  3. public static List<Person> getPersons(InputStream is) throws Exception{
  4. List<Person> persons = null;
  5. Person person = null;
  6. XmlPullParser pullParser = Xml.newPullParser();
  7. pullParser.setInput(is,"UTF-8");
  8. int eventType = pullParser.getEventType();
  9. while(eventType!=XmlPullParser.END_DOCUMENT){
  10. switch(eventType){
  11. case XmlPullParser.START_DOCUMENT:
  12. persons = new ArrayList<Person>();
  13. break;
  14. case XmlPullParser.START_TAG:
  15. if("person".equals(pullParser.getName())){
  16. int id = Integer.valueOf(pullParser.getAttributeValue(0));
  17. person = new Person();
  18. person.setId(id);
  19. }
  20. if(person != null){
  21. if("name".equals(pullParser.getName())){
  22. person.setName(pullParser.nextText());
  23. }
  24. if("age".equals(pullParser.getName())){
  25. person.setAge(new Short(pullParser.nextText()));
  26. }
  27. }
  28. break;
  29. case XmlPullParser.END_TAG:
  30. if("person".equals(pullParser.getName())){
  31. persons.add(person);
  32. person = null;
  33. }
  34. break;
  35. }
  36. eventType = pullParser.next();
  37. }
  38. return persons;
  39. }
  40. }

//3.单元测试类 SAXParserTest.java
  1. public class SAXParserTest extends AndroidTestCase {
  2. private static final String TAG = "SAXParserTest";
  3. public void testPullGetPerson() throws Throwable{
  4. InputStream is = this.getClass().getClassLoader().getResourceAsStream("person.xml");
  5. List<Person> persons = PullParseService.getPersons(is);
  6. String text = "";
  7. for(Person p:persons){
  8. text = text + "ID: "+p.getId()+" Name: "+p.getName()+" Age: "+p.getAge()+"\n";
  9. }
  10. Log.i(TAG,text);
  11. }
  12. }

//4.MainActivity.java
  1. public class MainActivity extends Activity {
  2.  
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. TextView main = (TextView) findViewById(R.id.main_content);
  8. InputStream is = MainActivity.class.getClassLoader().getResourceAsStream("person.xml");
  9. try {
  10. List<Person> persons = testPull(is);
  11. String text = "Pull ";
  12. for(Person p:persons){
  13. text = text + "ID: "+p.getId()+" Name: "+p.getName()+" Age: "+p.getAge()+"\n";
  14. }
  15. main.setText(text);
  16. } catch (Exception e) {
  17. e.printStackTrace();
  18. }
  19. }
  20.  
  21. private List<Person> testPull(InputStream is) throws Exception{
  22. return DomParserService.getPersons(is);
  23. }
  24. }

//6.AndroidManifest.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="cn.gzu.xmlparsertest"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-sdk
  8. android:minSdkVersion="8"
  9. android:targetSdkVersion="18" />
  10.  
  11. <application
  12. android:allowBackup="true"
  13. android:icon="@drawable/ic_launcher"
  14. android:label="@string/app_name"
  15. android:theme="@style/AppTheme" >
  16. <uses-library android:name="android.test.runner" />
  17. <activity
  18. android:name="cn.gzu.xmlparsertest.MainActivity"
  19. android:label="@string/app_name" >
  20. <intent-filter>
  21. <action android:name="android.intent.action.MAIN" />
  22.  
  23. <category android:name="android.intent.category.LAUNCHER" />
  24. </intent-filter>
  25. </activity>
  26. </application>
  27. <instrumentation android:name="android.test.InstrumentationTestRunner"
  28. android:targetPackage="cn.gzu.xmlparsertest" />
  29.  
  30. </manifest>



//7.xml生成方法(PullParseService.java中)
/** Pull 保存Xml文档 */

  1. public static void save(List<Person> persons,OutputStream os) throws Exception{
  2. XmlSerializer xSerializer = Xml.newSerializer();
  3. xSerializer.setOutput(os,"UTF-8");
  4. xSerializer.startDocument("UTF-8",true);
  5. xSerializer.startTag(null,"persons");
  6. for(Person person : persons){
  7. xSerializer.startTag(null,"person");
  8. xSerializer.attribute(null,"id",person.getId().toString());
  9. xSerializer.startTag(null,"name");
  10. xSerializer.text(person.getName());
  11. xSerializer.endTag(null,"name");
  12. xSerializer.startTag(null,"age");
  13. xSerializer.text(String.valueOf(person.getAge()));
  14. xSerializer.endTag(null,"age");
  15. xSerializer.endTag(null,"person");
  16. }
  17. xSerializer.endTag(null,"persons");
  18. xSerializer.endDocument();
  19. os.flush();
  20. os.close();
  21. }
//8.测试生成方法 public void testPullSavePerson() throws Throwable{ File file = new File(this.getContext().getFilesDir(),"persons.xml"); FileOutputStream outputStream = new FileOutputStream(file); List<Person> persons = new ArrayList<Person>(); persons.add(new Person(101,"张五常",(short)21)); persons.add(new Person(102,"刘丽",(short)20)); persons.add(new Person(103,"吴雪雪",(short)19)); persons.add(new Person(104,"莉莉",(short)23)); PullParseService.save(persons,outputStream); Log.i(TAG,"***************** testPullSavePerson **************"); } //9.生成结果 persons.xml <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <persons> <person id="101"> <name>张五常</name> <age>21</age> </person> <person id="102"> <name>刘丽</name> <age>20</age> </person> <person id="103"> <name>吴雪雪</name> <age>19</age> </person> <person id="104"> <name>莉莉</name> <age>23</age> </person> </persons> /****************************************【源码】END**************************************************/

猜你在找的XML相关文章