XML解析

本文介绍了XML的基本概念及其作为结构化数据的重要作用。详细讲解了三种XML解析方式:DOM解析,一次性加载整个文档到内存,适用于小规模数据;SAX解析,基于事件驱动,内存占用少,适合大型XML文件;以及Pull解析,是Android系统的内置解析方式,效率高且使用简便。每种解析方式都列举了关键方法和使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、XML介绍

  • XML:Extensible Markup Language,即可扩展标记语言. 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据.
  • 举例如下:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <name>冰与火之歌</name>
        <author>乔治马丁</author>
        <year>2014</year>
        <price>89</price>
    </book>
    <book id="2">
        <name>安徒生童话</name>
        <author>安徒生</author>
        <year>2004</year>
        <price>77</price>
    </book>
</bookstore>

在这里插入图片描述

二、XML解析介绍

1.DOM解析

  • DOM(Document Object Model) 是一种用于XML文档的对象模型,可用于直接访问 XML 文档的各个部分。它是一次性全部将内容加载在内存中,生成一个树状结构,它没有涉及回调和复杂的状态管理。
    缺点是加载大文档时效率低下。
  • 常用方法:
    1.Document:getElementsByTagName(节点名称); -->根据节点名称获取列表
    2.Nodelist:getChildNodes(); -->获取当前节点所有子节点
    3.getAttributes(); -->获取当前节点所有属性和值
    4.getNodeValues(); -->获取当前节点的值
    5.getTextContent(); -->获取当前节点的文本
    6.getNodeName(); -->获取当前节点名称

2.SAX解析

  • SAX(Simple API for XML) 使用流式处理的方式,它并不记录所读内容的相关信息。它是一种以事件为驱动的XML API,解析速度快,占用内存少。使用回调函数来实现。缺点是不能倒退。
  • 用法:
    (1)自定义类继承DefaultHandler并重写四个方法
    (2)获取SAX工厂 SAXParserFactory factory = SAXParserFactory.newInstance();
    (3)获取解析器 SAXParser saxParser = factory.newSAXParser();
    (4)设置解析 saxParser.parse(is,myHanlder);

3.Pull解析

  • Pull 内置于 Android 系统中。也是官方解析布局文件所使用的方式。Pull 与 SAX 有点类似,都提供了类似的事件,如开始元素和结束元素。
    不同的是,SAX 的事件驱动是回调相应方法,需要提供回调的方法,而后在 SAX 内部自动调用相应的方法。
    而Pull解析器并没有强制要求提供触发的方法。因为他触发的事件不是一个方法,而是一个数字。它使用方便,效率高
  • 常用方法:
    (1) getEventType(); -->获取当前时间类型
    (2) getAttributeValues(); -->获取标签属性
    (3) next(); -->移动至下一个时间的类型
    (4) nextText(); -->获取标签值
    (5) setInput(); -->设置解析

三、XML解析实例

1.DOM解析

    private void dom() {
   
   
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
   
   
            DocumentBuilder builder = factory.newDocumentBuilder();
            InputStream is = getAssets().open("book.xml");
            Document document = builder.parse(is);
            NodeList list = document.getElementsByTagName("book");
            for(int i=0;i<list.getLength();i++){
   
   
                BookBean bookBean = new BookBean();
                Node node = list.item
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值