Android中的xml解析介绍

下面就为您详细讲解“Android中的xml解析介绍”的完整攻略。

什么是XML解析

XML 指可扩展标记语言。 XML 被设计用来传输和存储数据。 XML 是一种非常常用的数据传输格式,也是 Android 开发中常用的一种数据传输格式。Android 中常用的 XML 解析方式有三种:SAX、DOM 和 Pull。

SAX 解析方式

SAX 是 Simple API for XML 的缩写,是一种基于事件驱动的解析方式,SAX 解析 XML 文件时,按顺序解析每个 XML 元素,是一种快速并且最佳的解析方式。但是使用起来比较复杂,需要实现 ContentHandler 接口,并且需要对每个节点进行处理,可以通过继承 DefaultHandler 类来减少代码量。

以下是 SAX 解析方式的示例代码:

public class SaxParseXml extends DefaultHandler {
    private List<Book> bookList = null;
    private Book book = null;
    private String content = null;
    public List<Book> getBookList() {
        return bookList;
    }
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        bookList = new ArrayList<Book>();
    }
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        if (qName.equals("book")) {
            book = new Book();
            String id = attributes.getValue("id");
            book.setId(id);
        }
        content = "";
    }
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        if (qName.equals("book")) {
            bookList.add(book);
        } else if (qName.equals("name")) {
            book.setName(content);
        } else if (qName.equals("author")) {
            book.setAuthor(content);
        } else if (qName.equals("year")) {
            book.setYear(content);
        } else if (qName.equals("price")) {
            book.setPrice(content);
        }
    }
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        content += new String(ch, start, length);
    }
}

DOM 解析方式

DOM 是 Document Object Model 的缩写,是一种建立在内存中表示 XML 文件并进行操作的解析方式。相对于 SAX 解析方式,DOM 解析方式可以在内存中进行修改,不需要修改 XML 文件。但是因为需要将整个 XML 文件都加载到内存中,所以相对比较占用资源。

以下是 DOM 解析方式的示例代码:

public void createXml(Document document, String fileName) throws Exception {
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    DOMSource source = new DOMSource(document);
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    File file = new File("/mnt/sdcard/" + fileName);
    if (!file.exists()) {
        file.createNewFile();
    }
    StreamResult result = new StreamResult(file);
    transformer.transform(source, result);
}

Pull 解析方式

Pull 解析方式是 Android 中自 Android 2.2(API Level 8)开始引入的解析方式。相比较 SAX 解析方式来说,Pull 解析方式对内存资源使用较小,解析速度较快,而且使用起来也比较方便。要使用 Pull 解析方式,需要借助 XmlPullParser 类。

以下是 Pull 解析方式的示例代码:

public static List<Book> readXML(InputStream is) throws Exception {
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser parser = factory.newPullParser();
    parser.setInput(is, "UTF-8");
    int eventType = parser.getEventType();
    List<Book> bookList = null;
    Book book = null;
    while (eventType != XmlPullParser.END_DOCUMENT) {
        switch (eventType) {
            case XmlPullParser.START_DOCUMENT:
                bookList = new ArrayList<Book>();
                break;
            case XmlPullParser.START_TAG:
                if (parser.getName().equalsIgnoreCase("book")) {
                    book = new Book();
                } else if (parser.getName().equalsIgnoreCase("id")) {
                    String id = parser.nextText();
                    book.setId(id);
                } else if (parser.getName().equalsIgnoreCase("name")) {
                    String name = parser.nextText();
                    book.setName(name);
                } else if (parser.getName().equalsIgnoreCase("author")) {
                    String author = parser.nextText();
                    book.setAuthor(author);
                } else if (parser.getName().equalsIgnoreCase("year")) {
                    String year = parser.nextText();
                    book.setYear(year);
                } else if (parser.getName().equalsIgnoreCase("price")) {
                    String price = parser.nextText();
                    book.setPrice(price);
                }
                break;
            case XmlPullParser.END_TAG:
                if (parser.getName().equalsIgnoreCase("book")) {
                    bookList.add(book);
                    book = null;
                }
                break;
        }
        eventType = parser.next();
    }
    return bookList;
}

总结

以上就是 Android 中常用的三种 XML 解析方式:SAX、DOM 和 Pull。在开发中我们可以根据具体情况选择相应的方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android中的xml解析介绍 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • java中四种操作xml方式的比较

    下面是针对这个话题的详细讲解: 介绍 XML作为一种常见的数据交换格式,有多种方式在Java中进行处理。本文将介绍Java中四种操作XML的方式的比较,包括DOM、SAX、JAXB和StAX。 DOM DOM(Document Object Model)是一种基于树形结构的解析方式,将XML文件整个读取至内存中形成树结构,通过遍历树结构来访问和修改XML文件…

    html 2023年5月30日
    00
  • 手机qq讨论组不能@好友该怎么解决?

    以下是解决手机QQ讨论组不能@好友的攻略: 手机QQ讨论组不能@好友解决方法 检查好友是否在讨论组中:首先,检查好友是否已经加入了讨论组。如果好友没有加入讨论组,那么就无法在讨论组中@他。 检查讨论组设置:其次,检查讨论组的设置。如果讨论组的设置中禁止了@好友功能,那么就无法在讨论组中@好友。可以在讨论组设置中开启@好友功能。 更新QQ版本:如果以上两种方法…

    html 2023年5月17日
    00
  • jsp fckeditor 上传中文图片乱码问题的解决方法

    针对“jsp fckeditor 上传中文图片乱码问题的解决方法”这个问题,以下是详细攻略: 问题描述 在使用JSP集成FCKeditor富文本编辑器时,上传中文图片时会出现乱码问题。 解决方法 FCKeditor默认是以ISO-8859-1编码方式进行上传的,所以中文图片上传时会出现乱码问题。需要进行以下两个步骤的解决。 步骤一:修改FCKeditor配置…

    html 2023年5月31日
    00
  • phpword插件导出word文件时中文乱码问题处理方案

    我来讲解一下“phpword插件导出word文件时中文乱码问题处理方案”的完整攻略。 1. 问题描述 在使用phpword插件导出word文件时,可能会遇到中文乱码的问题,即导出的word文件中,中文内容无法正确显示。 2. 原因分析 这个中文乱码问题的原因通常是因为文档的编码设置不正确,或者是php语言本身对中文字符的处理方式不同。 3. 解决方法 下面是…

    html 2023年5月31日
    00
  • 用js动态添加html元素,以及属性的简单实例

    下面是详细的“用js动态添加html元素,以及属性的简单实例”的攻略: 1. 添加HTML元素 在HTML文档中,可以通过Javascript的代码来添加新的HTML元素,达到动态修改页面的目的。下面的例子展示了如何用javascript添加一个新的<div>元素,并将它添加到文档中: // 创建一个div元素 var div = documen…

    html 2023年5月30日
    00
  • U盘出现乱码并无法格式化如何拯救U盘资料并修复U盘坏扇区

    解决U盘出现乱码的方法 当U盘出现乱码时,我们可以采取以下措施来解决它。 方法一:检查病毒 有时U盘上的病毒会导致乱码出现,我们可以采取以下步骤: 插入U盘后打开杀毒软件,全盘扫描。 找出所有感染的病毒并删除。 重新插入U盘并查看是否还存在乱码问题。 方法二:恢复文件系统 U盘格式化丢失或者文件系统错误都会导致U盘乱码。我们可以使用以下方法来解决这个问题。 …

    html 2023年5月31日
    00
  • Java 将HTML转为XML的详细步骤

    将HTML转为XML的过程主要包括以下几个步骤: 通过Java的网络编程实现HTML的爬取 使用Jsoup库解析HTML 将解析后的HTML转化为XML 对XML进行操作,如存储、转换等 下面将通过两个示例详细讲解这个过程。 示例一: import java.io.IOException; import org.jsoup.Jsoup; import org…

    html 2023年5月30日
    00
  • C#采用OpenXml实现给word文档添加文字

    添加文字到Word文档,可以使用C#语言中开放式XML(OpenXml)SDK,这是一种用于处理Office文档的开源库。 下面是使用OpenXml创建并添加文本到Word文档的完整攻略: 准备开发环境 首先需要在电脑上安装Visual Studio开发工具和OpenXml SDK。Visual Studio可以访问官网下载并安装,而OpenXml SDK可…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部