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解析技术

    Java中常用的四种XML解析技术包括DOM、SAX、JDOM和DOM4J。每种技术都有自己的特点和适用场景。下面分别进行详细讲解: DOM DOM(Document Object Model)是一种W3C推荐的XML解析技术,能够将整个XML文档加载到内存中,并以树形结构的形式表示XML文档的各个元素节点,因此能够轻松进行对XML文档的读写操作。 DOM解…

    html 2023年5月30日
    00
  • PHP读MYSQL中文乱码的快速解决方法

    下面是关于“PHP读MYSQL中文乱码的快速解决方法”的完整攻略。 1. 确认数据库字符集和连接字符集 在PHP连接MYSQL时,需要保证数据库和连接字符集是一致的,并且应该都使用UTF-8字符集。可以使用以下代码检测数据库和连接字符集是否一致: $mysqli->query("SET NAMES ‘utf8’"); $sql = …

    html 2023年5月31日
    00
  • hbuilderx怎么折叠其他项目?hbuilderx折叠其他项目方法

    以下是关于HBuilderX折叠其他项目的攻略: HBuilderX怎么折叠其他项目? HBuilderX是一款跨平台的前端开发工具,支持多种编程语言和框架。在HBuilderX中,您可以通过折叠其他项目来更好地管理您的项目。以下是详细的攻略: 打开项目:首先,打开您的项目,进入项目文件夹。 折叠其他项目:在项目文件夹中,右键单击要折叠的项目,然后选择“折叠…

    html 2023年5月17日
    00
  • AndroidStudio重新share代码和上传到svn新地址教程

    以下是详细讲解“Android Studio重新share代码和上传到svn新地址教程”的完整攻略。 环境准备 在进行重新Share代码和上传到新地址的操作之前,你需要确保你的Android Studio中已经配置了svn插件,例如TortoiseSVN。如果尚未安装,你可以从官网下载并安装。 Step 1:将代码从旧地址check out到本地 首先,我们…

    html 2023年5月31日
    00
  • Python强大的语法支持你知道吗

    当谈到Python这门编程语言时,人们常常会提到他的简单易学,清晰易懂的语法特性。但是,Python强大的语法支持更是让其成为众多开发者、数据科学家、工程师最喜爱的编程语言之一。 下面是Python强大语法的攻略,文中将以示例的方式来说明。 简单易懂的控制流结构 Python的控制流结构非常简洁明了,且易于理解。例如,Python的条件控制语句if-else…

    html 2023年5月30日
    00
  • PHP MYSQL乱码问题,使用SET NAMES utf8校正

    在进行PHP和MYSQL数据库编程时,常会遇到中文字符出现乱码的问题。这是由于PHP默认以ISO-8859-1编码输出,而MYSQL默认的编码方式是latin1。为了解决这个问题,我们可以采用使用SET NAMES utf8校正的方法。 具体的操作步骤如下: 1.修改mysql配置文件将mysql配置文件的默认编码改为utf8,可通过修改my.ini或my.…

    html 2023年5月31日
    00
  • JSON扫盲帖 JSON.as类教程

    下面是对“JSON扫盲帖 JSON.as类教程”这篇文章的详细讲解攻略。 一、什么是JSON 首先,我们需要了解JSON的基本概念。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序中的数据传输。JSON数据以键值对的形式组成,并使用大括号{}表示一个对象,中括号[]表示一个数组。JSON中的值可…

    html 2023年5月30日
    00
  • libxml教程(图文详解)

    Libxml教程(图文详解) Libxml是一个用于解析和生成XML文档的库,广泛应用于世界各地的开发者中。本篇教程将带您了解Libxml的一些基本用法和示例。 安装Libxml 安装Libxml非常简单,只需使用apt-get或yum安装即可: sudo apt-get install libxml2-dev (Ubuntu/Debian) sudo yu…

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