Sax,Dom,Full解析xml文件

1.Sax解析xml文件

Sax解析读取一点,解析一点,适合读取大容量的xml文件,从上往下逐点读取,不能往回读,Sax解析通常只读取文件,不能修改文件。

1.1将user.xml传到assets中

<?xml version="1.0"encoding="UTF-8"?>
<list>
<user>
 <username>root</username>
 <password>root</password>
 <email>[email protected]</email>
</user>
<user>
 <username>张三丰</username>
 <password>zhangsanfeng</password>
 <email>[email protected]</email>
</user>
</list>

1.2新建Class对标签(username,password,email)进行私有定义化

package com.example.day20190530;

public class User {

   private String username;

    private String password;

  private String email;

   public String getUsername() {

     return username;

}

   public void setUsername(String username) {

      this.username = username;

}

  public String getPassword() {

      return password;

}

    public void setPassword(String password) {

      this.password = password;

}

  public String getEmail() {

      return email;

}

    public void setEmail(String email) {

     this.email = email;

   }

}

1.3.1创建解析器

Sax解释方式的步骤

1.先要创建Sax解释器的工厂对象

2.可以使用Sax解释器的工厂对象生产一个Sax解释器

3.创建事件处理器类,编写对应的读取方式

4.使用Sax解释器解释xml文件

package com.example.day20190530;

import java.io.IOException;

import java.io.InputStream;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;

public class SaxActivity extends Activity implements OnClickListener {

  private Button saxBtn;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

     setContentView(R.layout.activity_sax);

    saxBtn = (Button) findViewById(R.id.saxBtn);

    saxBtn.setOnClickListener(this);  }

  @Override

   public void onClick(View v) {

      try {

         // 读取assets目录中的资源文件

         InputStream is = getAssets().open("user.xml");

         // Xml解析器

        SaxHelper helper = new SaxHelper();

         // Sax解析器工厂

         SAXParserFactory factory = SAXParserFactory.newInstance();

         // 创建Sax解析器

        SAXParser parser = factory.newSAXParser();

         // 将helper分配给Sax解析器

        parser.parse(is, helper);

           is.close();

         Toast.makeText(this, "共有" + helper.getList().size() + "条数据",      Toast.LENGTH_SHORT).show();

       } catch (Exception e) {

         e.printStackTrace();

      }

   }

}

1.3.2创建事件处理器

package com.example.day20190530;

import java.util.ArrayList; import java.util.List;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import android.util.Log;

/**

* Sax解析器

* @author Administrator

*  */

public class SaxHelper extends DefaultHandler {

   private List<User> list;// 存放解析的所有对象

  private User user;

     private String tagName;// 解析的标签的名字

  /**

  * 解析文档开始执行的方法

   */

   @Override

   public void startDocument() throws SAXException {

      list = new ArrayList<User>();

      Log.i("sax", "开始解析文档");

   }

  /**

  * 解析节点开始执行的方法

  */

  @Override

  public void startElement(String uri, String localName, String qName,    Attributes attributes) throws SAXException {

     if ("user".equals(localName)) {

        user = new User();

        Log.i("sax", "开始解析" + localName + "节点");

       }

         this.tagName = localName;

     }

     /**

     * 读取节点内容

     */

     @Override

     public void characters(char[] ch, int start, int length)    throws SAXException {

        if (tagName != null) {

         String data = new String(ch, start, length);

         if ("username".equals(tagName)) {

             user.setUsername(data);

          } else if ("password".equals(tagName)) {

           user.setPassword(data);

          } else if ("email".equals(tagName)) {

              user.setEmail(data);

          }

         Log.i("sax", "读取节点的内容" + data);

      }    

    }

     /**

     * 读取结束节点

      */

    @Override

     public void endElement(String uri, String localName, String qName)    throws SAXException {

       if("user".equals(localName)){

         list.add(user);

           user=null;

          Log.i("sax", "结束节点"+localName);

        }

        tagName=null;

      }

       /**

       * 文档解析结束

      */

      @Override

       public void endDocument() throws SAXException {

         Log.i("sax","文档解析结束");

        }

         /**

          * 返回list集合

          * @return

          */

         public List<User>getList(){

             return list;

     }

}

2.Dom解析文件

2.1将user.xml文件导入到assets中

2.2创建Class将(password,username,email)私有定义化

2.3创建Dom解析器

package com.example.day20190530;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener; import android.widget.Button;

import android.widget.Toast;

public class DomActivity extends Activity implements OnClickListener {

  private Button domBtn;

  private User user;

  private List<User> list;

  @Override  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_dom);

    list = new ArrayList<User>();

    domBtn = (Button) findViewById(R.id.domBtn);

    domBtn.setOnClickListener(this);

  }

  @Override  public void onClick(View v) {

       // 创建Dom解析工厂

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

     // 创建Dom解析器

      try {

        DocumentBuilder builder = factory.newDocumentBuilder();

        // 读取资源文件

        InputStream is = getAssets().open("user.xml");

        // 将文档对象加载到内存中

        Document doc = builder.parse(is);

        // 找到所有的user节点

        NodeList userList = doc.getElementsByTagName("user");

        // 遍历所有的user节点和子节点

          for (int i = 0; i < userList.getLength(); i++) {

            // 获取每一个user节点

            Element eleUser = (Element) userList.item(i);

            // 获取子节点的内容

            String username = eleUser.getElementsByTagName("username").item(0).getFirstChild().getNodeValue();

            String passeord = eleUser.getElementsByTagName("passeord").item(0).getFirstChild().getNodeValue();

            String email = eleUser.getElementsByTagName("email").item(0).getFirstChild().getNodeValue();

            Toast.makeText(this, username + "," + passeord + "," + email,       Toast.LENGTH_SHORT).show();

          }

        } catch (Exception e) {

              e.printStackTrace();

        }

     }

}

3.Full解析xml文件

3.1将user.xml文件导入到assets目录中

3.2创建Class将(password,username,email)进行私有定义化

3.3创建Full解析器

package com.example.day20190530;

import java.io.InputStream;

import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener; import android.widget.Button;

import android.widget.Toast;

public class FullActivity extends Activity implements OnClickListener {

  private Button pullBtn;

  @Override  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_full);

    pullBtn = (Button) findViewById(R.id.pullBtn);

    pullBtn.setOnClickListener(this);

  }

  @Override  public void onClick(View v) {

    try {

      // 读取资源文件

      InputStream is = getAssets().open("book.xml");

      // 创建解析器工厂对象

      XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

      XmlPullParser parser = factory.newPullParser();

      parser.setInput(is, "UTF-8");// 设置解析编码

      int eventType = parser.getEventType();// 获取事件类型

      // 判断文档是否读取结束

      while (eventType != XmlPullParser.END_DOCUMENT) {

        String tagName = parser.getName();// 获取标签名

        // 判断是否为开始标签

        if (eventType == XmlPullParser.START_TAG) {

          if ("name".equals(tagName)) {

            Toast.makeText(this, parser.nextText(),Toast.LENGTH_SHORT).show();

              } else if ("price".equals(tagName)) {

            Toast.makeText(this, parser.nextText(),Toast.LENGTH_SHORT).show();

           } else if ("desc".equals(tagName)) {

            Toast.makeText(this, parser.nextText(),Toast.LENGTH_SHORT).show();

           }

        }

        eventType = parser.next();

      }

    } catch (Exception e) {

      e.printStackTrace();

    }

  }

}

原文地址:https://www.cnblogs.com/zhulinglin/p/zhuzhu.html

时间: 2024-11-09 06:18:51

Sax,Dom,Full解析xml文件的相关文章

通过Dom方式解析xml文件

此项目通过简单的天气情况显示来实现xml文件的解析 1. 搭建环境 1)创建如下图的包.类及文件 2)布局文件的大概样式如下图所示,用到四个TextView控件和一个RadioGroup控件 3)china.xml文件的内容如下 <?xml version="1.0" encoding="UTF-8"?> <china dn="day"> <city cityname="南京" pyName=&q

android如何使用DOM来解析XML文件

对于以下的xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <books> <book email="zhoujunhui&quo

DOM方式解析xml文件查看天气

1.步骤: ①创建文档解析器的工厂对象 ②得到文档解析器对象 ③获取输入流对象 ④通过解析器的parse方法解析is对象 转换成Document对象 ⑤返回的是文档的根节点 ⑥判断是否有孩子节点进行获取子节点转换成元素节点得到属性节点 ⑦得到具体的某个属性节点 2.解析元素节点.属性节点.文本节点: 3.界面搭建 界面搭建的相关代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

在iOS 开发中用GDataXML(DOM方式)解析xml文件

因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我们需要做如下配置: 当配置玩这个操作之后,再次进行编译的时候,系统还是报错,是因为我们还需要进行如下操作:

初学DOM树解析xml文件

做了一次设计模式实验的题目: 某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以将原本存储在手机中的通信录.短信.照片.歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或SD卡)中.在实现过程中需要与多个已有的类进行交互,例如通讯录管理类.短信管理类等,为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份功能. 我自己在这道题目中构建了MMC,SD继承了abstract class的AbstractCard类,这样方便以后继续增加外接卡 对于通信录.短

[学习手记] Java中利用DOM方法解析XML文件

需求分析: 在做一个利用API的小东西时需要对返回的XML格式的数据进行解析 详见文章: [开发手记] 一款基于命令行的英英词典 (A CLI-Based EE Dictionary) 项目地址: https://github.com/hwding/seekDict 准备工作: 阅读Documentation 查阅相关代码 读入XML文件到程序内: 首先用DocumentBuilderFactory生成一个DocumentBuilder实例 DocumentBuilder docmumentBu

dom方式解析xml文件的步骤

DOM解析XML文件

除了可以使用SAX解析XML文件,大家也可以使用熟悉的DOM来解析XML文件. DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOMAPI遍历XML树.检索所需的数据.使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单.但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小

通过Sax方式解析xml文件

说明:此案例使用的是通过Dom方式解析xml文件这篇文章里的City类和china.xml文件. 1. 因为xml文件有两种格式,一是上面那篇文章里的那种元素节点里只包含属性节点,另一种就是元素节点里包含元素节点和文本节点,于是在china.xml中添加如下代码,以实现两种方式的解析: <city> <cityname>杭州</cityname> <pyName>zhejiang</pyName> <quName>浙江</quN

Java解析XML文件的方式

在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式,在这部分里,将分别给大家演示通过这两种方式解析xml文件的一般步骤. 1 XML的文件格式     XML是可扩展标记语言(Extensible Markup Language)的缩写,在其中,开始标签和结束标签必须配套地出现,我们来看下book.xml这个例子. 1 <?xml version=