加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用SAX解析XML文件

发布时间:2020-12-16 00:21:30 所属栏目:百科 来源:网络整理
导读:SAX(Simple API for XML),是指一种接口,或者一个软件包。 DOM:文档驱动。 DOM在解析文件之前把整个文档装入内存 ,处理大型文件时其性能很差,是由于DOM的树结构所造成的,此结构占用的内存较多。 SAX:事件驱动型的XML解析方式。 顺序读取XML文件,不需要一

SAX(Simple API for XML),是指一种接口,或者一个软件包。

DOM:文档驱动。DOM在解析文件之前把整个文档装入内存,处理大型文件时其性能很差,是由于DOM的树结构所造成的,此结构占用的内存较多。

SAX:事件驱动型的XML解析方式。顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问,且是只读的。

由于移动设备的内存资源有限,SAX的顺序读取方式更适合移动开发。

SAX解析XML步骤
①创建XML解析处理器。
②创建SAX解析器。
③将XML解析处理器分配给解析器。
④对文档进行解析,将每个事件发送给处理器。

下面是SAX解析XML文件的代码程序,完整代码下载地址:android_sax.rar

MainActivity:

[java] view plain copy
  1. /**
  2. *MainActivity
  3. *
  4. *@authorzuolongsnail
  5. */
  6. publicclassMainActivityextendsActivity{
  7. privateButtonparseBtn;
  8. privateListViewlistView;
  9. privateArrayAdapter<Person>adapter;
  10. privateArrayList<Person>persons;
  11. @Override
  12. voidonCreate(BundlesavedInstanceState){
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. parseBtn=(Button)findViewById(R.id.parse);
  16. listView=(ListView)findViewById(R.id.list);
  17. parseBtn.setOnClickListener(newOnClickListener(){
  18. @Override
  19. voidonClick(Viewv){
  20. persons=MainActivity.this.readXml();
  21. adapter=newArrayAdapter<Person>(MainActivity.this,
  22. android.R.layout.simple_expandable_list_item_1,persons);
  23. listView.setAdapter(adapter);
  24. }
  25. });
  26. privateArrayList<Person>readXml(){
  27. InputStreamfile=this.getClass().getClassLoader()
  28. .getResourceAsStream("persons.xml");
  29. //①创建XML解析处理器
  30. SAXXmlContentHandlercontentHandler=newSAXXmlContentHandler();
  31. try{
  32. //创建一个SAXParserFactory
  33. SAXParserFactoryfactory=SAXParserFactory.newInstance();
  34. //②创建SAX解析器
  35. SAXParserparser=factory.newSAXParser();
  36. //③将XML解析处理器分配给解析器
  37. //④对文档进行解析,将每个事件发送给处理器。
  38. parser.parse(file,contentHandler);
  39. file.close();
  40. }catch(Exceptione){
  41. e.printStackTrace();
  42. }
  43. returncontentHandler.getBooks();
  44. }

XML解析处理器:

copy
    *解析XML处理器
  1. *@authorzuolongsnail
  2. *
  3. */
  4. classSAXXmlContentHandlerextendsDefaultHandler{
  5. privateArrayList<Person>persons;
  6. privatePersonperson;
  7. privateStringtagName;
  8. publicArrayList<Person>getBooks(){
  9. returnpersons;
  10. voidstartDocument()throwsSAXException{
  11. this.persons=newArrayList<Person>();
  12. Log.e("SAXXmlContentHandler","开始解析XML文件");
  13. voidstartElement(Stringuri,StringlocalName,StringqName,248)"> Attributesattributes)throwsSAXException{
  14. "读取标签");
  15. this.tagName=localName;
  16. if(this.tagName.equals("person")){
  17. person=newPerson();
  18. person.setId(Integer.parseInt(attributes.getValue(0)));
  19. voidcharacters(char[]ch,intstart,153); font-weight:bold; background-color:inherit">intlength)
  20. "根据tagName获取标签的内容");
  21. this.tagName!=null){
  22. Stringdata=newString(ch,start,length);
  23. this.tagName.equals("name")){
  24. this.person.setName(data);
  25. }elsethis.tagName.equals("age")){
  26. this.person.setAge(Integer.parseInt(data));
  27. voidendElement(Stringuri,StringqName)
  28. if(localName.equals("person")){
  29. this.persons.add(person);
  30. this.tagName=null;
  31. }

persons.xml文件:

[xhtml] copy
    <?xmlversion="1.0"encoding="UTF-8"?>
  1. <persons>
  2. personid="1">
  3. name>张三</age>24personpersonid="2">李四>25personid="3">王五>26>

Person实体类:

copy

    *Person实体类
  1. classPerson{
  2. privateintid;
  3. privateStringname;
  4. intage;
  5. publicPerson(){
  6. publicPerson(intid,Stringname,153); font-weight:bold; background-color:inherit">intage){
  7. this.id=id;
  8. this.name=name;
  9. this.age=age;
  10. intgetId(){
  11. returnid;
  12. voidsetId(intid){
  13. this.id=id;
  14. publicStringgetName(){
  15. returnname;
  16. voidsetName(Stringname){
  17. intgetAge(){
  18. returnage;
  19. voidsetAge(intage){
  20. this.age=age;
  21. publicStringtoString(){
  22. return"姓名:"+this.name+",年龄:"+this.age;
  23. main.xml文件:

    copy

      xmlversion="1.0"encoding="utf-8"LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    1. android:orientation="vertical"android:layout_width="fill_parent"
    2. android:layout_height="fill_parent"TextViewandroid:layout_width="fill_parent"
    3. android:layout_height="wrap_content"android:text="@string/hello"/>
    4. Buttonandroid:id="@+id/parse"android:layout_width="wrap_content"
    5. android:layout_height="wrap_content"android:text="SAX解析XML"ListViewandroid:id="@+id/list"android:layout_width="fill_parent"
    6. ListViewLinearLayout 程序运行截图:

      点击解析按钮后为

      (编辑:李大同)

      【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读