摸一篇xml解析。
xml解析大概分为三种,DOM解析,SAX解析和pull解析,我先用的DOM解析,发现在安卓里需要的内存太高了,然后就换成了SAX解析,pull还没摸过(摸了再添。
注意注意:安卓主线程里面是不允许进行网络操作的!要放在UI线程里!
DOM解析
DOM解析类似于一棵树,解析的时候相当于把xml里的内容都爬下来然后对树的节点进行取用,因此对内存的要求比较高。
使用方法:用document解析工厂把url的document爬下来,再用相应函数去提取节点的值。
常用函数:
NodeList Document.getElementsByTagName(String s) //通过标签名获得子树(大概
Node NodeList.item(int i) //返回列表的第i个节点
NodeList Node.getChildNodes() //返回节点的所有子节点列表
String Node.getTextContent() //获得节点内容
int NodeList.getLength() //返回子节点个数
1 | public void InsertItemFromURL(String url){ |
SAX解析
SAX解析就是顺序读取,从document开始慢慢读取到document尾部,所以要的内存就少的多,因为不需要把所有文件存到内存里面再进行取用。
helper继承DefaultHandler类。
需要重写的函数:
startDocument() //解析文档开始时的操作
startElement(String uri, String localName, String qName, Attributes attributes) //读到标签时的操作
characters(char[] ch, int start, int length) //读到标签内容时的操作
endElement(String uri, String localName, String qName) //标签结束时的操作
endDocument() //文档尾的操作
使用方法:用URLConnection获取输入流,使用SAX解析工厂,用解析工厂生成解析器,把输入流和helper类传给解析器。
大致代码如下(bean类的懒得复制了,大概看看就行):
1 | private SaxHelper readXmlForSAX(String link) throws Exception { |
1 | package com.example.quiterss; |
- Post link: https://andro-medam.github.io/2022/02/21/xml%E8%A7%A3%E6%9E%90/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.