XML的pull解析方式

*要先将xUtil包导入工程中

public class MainActivity extends Activity {

 private Person person;
 List<Person> list = new ArrayList<Person>();

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  // 得到Xml解析器(pull方式)
  XmlPullParser pullParser = Xml.newPullParser();

  try {
   // 设置要解析的xml文件到解析器里
   pullParser.setInput(getAssets().open("data.xml"), "utf-8");

   String tagName = null;
   // 得到读取到的事件类型,就是读取到了什么类型的标签(开始标签,结束标签,文本)
   int eventType = pullParser.getEventType();
   // 当文档读取结束,循环结束
   while (eventType != XmlPullParser.END_DOCUMENT) {

    switch (eventType) {
    // "文档开始读取"
    case XmlPullParser.START_DOCUMENT:

     System.out.println("文档开始读取");
     break;
    // 读取到开始标签
    case XmlPullParser.START_TAG:

     // 得到当前开始标签的名字
     tagName = pullParser.getName();

     System.out.println("文档读取到开始标签" + tagName);
     if ("person".equals(tagName)) {
      person = new Person();
      // 得到开始标签的属性值,通过角标获取,因为只有一个id="23"的属性,所以通过角标等于0读取
      // <person id="23">
      String id = pullParser.getAttributeValue(0).trim();
      person.setId(Integer.parseInt(id));
     }

     break;
    // 读取到文本
    case XmlPullParser.TEXT:
     if ("name".equals(tagName)) {
      // 获得name标签对应的文本,先获得标签对应的文本,再把文本内容封装起来
      // 获得标签对应的文本,pullParser.getText()
      person.setName(pullParser.getText().trim());
      System.out.println("文本内容" + pullParser.getText());
     } else if ("age".equals(tagName)) {
      // 获得age标签对应的文本
      person.setAge(pullParser.getText().trim());
      System.out.println("文本内容" + pullParser.getText());
     }

     break;
    // 读取到结束标签
    case XmlPullParser.END_TAG:
     // 得到结束标签名字
     tagName = pullParser.getName();
     System.out.println("文档读取到结束标签" + tagName);
     if ("person".equals(tagName)) {
      System.out.println(person.toString());
      list.add(person);
      person = null;
     }
     tagName = "";

     break;
    // 文档结束读取"
    case XmlPullParser.END_DOCUMENT:

     System.out.println("文档结束读取");
     break;
    }
    // 到下个节点,并且返回下一个节点的类型
    eventType = pullParser.next();

   }

  } catch (XmlPullParserException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PULL解析是一种基于事件驱动的解析方式,它逐行读取XML文档并触发事件,开发人员可以根据需要处理这些事件。相比于DOM解析方式PULL解析方式更加轻量级和高效,适用于处理大型XML文件。 以下是使用PULL解析方式解析XML文件的基本步骤: 1. 创建一个XmlPullParser实例,该实例可以从一个输入流中读取XML文档。例如,可以使用以下代码创建一个XmlPullParser实例: ```java XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(inputStream, null); ``` 2. 通过解析器读取XML文档中的每个元素,并在需要的时候处理它们。例如,可以使用以下代码循环读取XML文档中的每个元素: ```java int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG) { // 开始标签 String tagName = parser.getName(); if (tagName.equals("book")) { // 处理book元素 String bookName = parser.getAttributeValue(null, "name"); } } else if (eventType == XmlPullParser.END_TAG) { // 结束标签 } else if (eventType == XmlPullParser.TEXT) { // 元素内容 String text = parser.getText(); } eventType = parser.next(); } ``` 3. 根据需要处理每个元素。例如,可以使用上面的代码来处理book元素并获取它的name属性。 注意:在处理XML文档时,可能会遇到异常情况,例如XML语法错误或无法打开输入流。因此,开发人员需要在代码中捕获这些异常并进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值