Android中的xml解析介绍

yizhihongxing

下面就为您详细讲解“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日

相关文章

  • 笔记本摄像头如何打开 winxp/Win7笔记本摄像头打开方法

    笔记本摄像头如何打开 winxp/Win7笔记本摄像头打开方法 如果您的笔记本电脑配备了摄像头,但是无法打开,您可以按照以下步骤进行操作: 步骤1:检查设备管理器 单击“开始”按钮。 选择“控制面板”。 选择“设备管理器”。 在设备管理器中查找摄像头。 如果摄像头被禁用,请右键单击摄像头并选择“启用”。 步骤2:检查应用程序设置 打开您想要使用摄像头的应用程…

    html 2023年5月17日
    00
  • iphone语音控制功能怎么关闭(图解)

    以下是“iPhone语音控制功能怎么关闭(图解)”的完整攻略: iPhone语音控制功能怎么关闭(图解) 如果您不需要使用iPhone的语音控制功能,可以通过以下步骤关闭它。以下是详细的步骤和图解: 打开“设置”应用程序:在iPhone主屏幕上找到“设置”应用程序图标,然后单击它。 进入“通用”设置:在“设置”应用程序中,向下滚动并找到“通用”选项。单击它以…

    html 2023年5月18日
    00
  • php抓取页面的几种方法详解

    PHP抓取页面的几种方法详解 什么是抓取页面? 抓取页面,顾名思义,就是获取网站上的数据。通俗的说,就是爬取网页上的内容,然后根据需要进行处理分析。在互联网发展迅速的今天,抓取页面已经成为网络爬虫应用的重要组成部分,广泛应用于搜索引擎、数据挖掘、分析等领域,而PHP也是其中常用的语言之一。 抓取页面的方式 PHP抓取页面的方式多种多样,根据需求不同,可以选用…

    html 2023年5月30日
    00
  • VC解析XML文件-CMarkup的使用详解

    VC解析XML文件-CMarkup的使用详解 介绍 CMarkup是一款在VC++中解析XML文件非常实用的第三方库。CMarkup可以将XML文件解析成为一棵树,并且可以更方便地对XML文件进行读取、修改和写入等操作。这篇文章将详细地讲解在VC++中如何使用CMarkup解析XML文件,提供两个示例说明。 安装CMarkup CMarkup可以通过官方网站…

    html 2023年5月30日
    00
  • Camtasia Studio标注输入汉字乱码该怎么解决?

    为了解决Camtasia Studio标注输入汉字乱码的问题,需要进行以下步骤: 确认Camtasia Studio软件版本 首先,确保你的Camtasia Studio软件版本是最新的,因为旧版本可能会出现中文输入乱码这类问题。 切换输入法 在进行字幕输入时,需要将系统的输入法切换为中文输入法。这可以通过按下“Shift”和“Ctrl”组合键,或点击屏幕右…

    html 2023年5月31日
    00
  • win7 iis7.5 乱码 和 解析不了ASP的ADO连接数据库 的解决方法

    下面我将详细讲解“win7 iis7.5 乱码和解析不了ASP的ADO连接数据库的解决方法”的完整攻略,过程中将会包含两条示例说明。 一、问题描述 在Windows 7操作系统上安装了IIS7.5服务器后,如果使用ASP连接数据库(如Access)时,可能会遇到两个问题: 中文字符会出现乱码。 无法正常解析ASP页面中使用的ADO连接数据库的代码。 二、问题…

    html 2023年5月31日
    00
  • java生成csv文件乱码的解决方法示例 java导出csv乱码

    一、问题描述在Java中生成CSV文件时,可能会出现乱码的问题,导致文件内容无法正确显示。这可能是因为在生成CSV文件时,编码格式不正确所致。 二、解决方法 1、设置编码格式 Java中可以通过设置编码格式,来解决CSV文件中的乱码问题。参考代码如下: OutputStreamWriter osw = new OutputStreamWriter(new F…

    html 2023年5月31日
    00
  • word2016空白处下划线不显示怎么办?

    以下是“word2016空白处下划线不显示怎么办?”的完整攻略: word2016空白处下划线不显示怎么办? 如果您在Word 2016中输入下划线,但是在空白处下划线不显示,可能是由于多种原因引起的。以下是一些可能的解决方案: 检查字体:首先,检查您正在使用的字体是否支持下划线。有些字体不支持下划线,因此在这些字体中输入下划线时,下划线可能不会显示。如果您…

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