package com.tutor.xmlutil;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import android.content.Context;
import com.tutor.model.Book;
/**
* Sax解析xml文件
*
* @author 私念
*
*/
public class SaxParseXml
{
List<Book> beauty = new ArrayList<Book>();
Context context;
public SaxParseXml(Context context)
{
this.context = context;
}
/**
* 读取本地XML文件
*
* @param fileName
* @return
*/
public List<Book> SaxParseFileXML(String fileName)
{
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try
{
SAXParser saxParser = saxParserFactory.newSAXParser();
File file = new File(fileName);
saxParser.parse(file, new MyDefaultHandler());
}
catch (Exception e)
{
e.printStackTrace();
}
return beauty;
}
/**
* 读取互联网XML文件
*
* @param xmlUrlPath
* xml的URL
* @return
*/
public List<Book> SaxParseUrlXML(URL xmlUrlPath)
{
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try
{
XMLReader xmlReader = saxParserFactory.newSAXParser()
.getXMLReader();
MyDefaultHandler myDefaultHandler = new MyDefaultHandler();
xmlReader.setContentHandler(myDefaultHandler);
// StringReader stringReader = new StringReader(HttpClientConnector
// .getStringByUrl(xmlUrlPath.toString()));
// ------------------------------------------------------判断编码(防止乱码)
InputSource inputSource = null;
InputStream stream = null;
if ("GBK"
.equals(new FileCoding().isUrlCoding(xmlUrlPath.toString())))
{
stream = xmlUrlPath.openStream();
// 通过InputStreamReader设定编码方式
InputStreamReader streamReader = new InputStreamReader(stream,
"GBK");
inputSource = new InputSource(streamReader);
}
else
{
// 是utf-8编码
inputSource = new InputSource(xmlUrlPath.openStream());
inputSource.setEncoding("UTF-8");
}
// InputSource inputSource = new InputSource(stringReader);
xmlReader.parse(inputSource);
}
catch (Exception e)
{
e.printStackTrace();
}
return beauty;
}
/**
*
* @author chenzheng_java
* @description 一定要注意,这里是使用的内部类哦。 有些朋友可能有疑问,不用内部类不可以,答案是:当然可以。
* 这里用内部类的目的其实就是为了提高一丁点效率而已。 如果你喜欢看源码,你就会发现,源码中大量的使用了内部类的。
*
*/
private class MyDefaultHandler extends DefaultHandler
{
// 存储目前为止读取到的最后一个element的localname
private String currentElementName = "";
Book book = null;
/**
* characters (char ch[], int start, int length)当解析xml中遇到文本内容时会执行。 ch
* 这个数组中存放的是整个xml文件的字符串的数组形式 start是当前解析的文本在整个xml字符串文件中的开始位置
* length是当前解析的文本内容的长度 由上面的介绍我们可以知道,我们可以通过new
* String(ch,start,length)方法来获取我们正解析的文本内容
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException
{
String textContent = new String(ch, start, length);
if (currentElementName.equals("bookname") && textContent != null
&& !textContent.trim().equals(""))
{
book.setBookName(textContent);
}
if (currentElementName.equals("bookauthor") && textContent != null
&& !textContent.trim().equals(""))
{
book.setBookAuthor(textContent);
}
}
/**
* 开始解析xml时触发
*/
@Override
public void startDocument() throws SAXException
{
super.startDocument();
}
/**
* 解析到xml文档的末尾时触发
*/
@Override
public void endDocument() throws SAXException
{
super.endDocument();
}
/**
* 解析到元素的开始处触发 startElement (String uri, String localName, String qName,
* Attributes attributes) uri:Namespace值,当用户没有明确指定以及当命名空间没有被使用的时候,为null
* localName:element的名称,或者通俗点叫标签的名称。如<name>中的name就是localName qName:
* 和localName的唯一其别是
* ,当标签有namespace时,该值返回的数据为全限定名称。例如<chen:name>中,localName为name
* ,qName为chen:name attributes:元素包含的属性对象。如果没有属性时,返回一个空的属性对象
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
currentElementName = localName;
if (localName.equals("book"))
{
book = new Book();
}
}
/**
* 解析到元素的末尾时触发
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
if (localName.equals("book"))
{
beauty.add(book);
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
XmlDemo.rar (62个子文件)
bin
classes.dex 671KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable-mdpi
icon.png 2KB
XmlDemo.apk 256KB
com
tutor
model
Book.class 731B
http
Config.class 441B
HttpClientConnector.class 3KB
xmlutil
SaxParseXml.class 3KB
CreateXmlFile.class 3KB
PullParseXml.class 3KB
FileCoding.class 2KB
SaxParseXml$MyDefaultHandler.class 2KB
DomParseXml.class 4KB
xml
XmlDemo.class 4KB
R$layout.class 379B
R$id.class 571B
R$drawable.class 385B
R$attr.class 325B
R.class 496B
R$string.class 412B
classes
com
tutor
model
Book.class 731B
http
Config.class 432B
HttpClientConnector.class 3KB
xmlutil
SaxParseXml.class 3KB
CreateXmlFile.class 3KB
PullParseXml.class 3KB
FileCoding.class 2KB
SaxParseXml$MyDefaultHandler.class 2KB
DomParseXml.class 4KB
xml
XmlDemo.class 4KB
R$layout.class 379B
R$id.class 571B
R$drawable.class 385B
R$attr.class 325B
R.class 496B
R$string.class 412B
resources.ap_ 11KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
values
strings.xml 165B
drawable-mdpi
icon.png 3KB
layout
main.xml 2KB
assets
gen
com
tutor
xml
R.java 1KB
proguard.cfg 1KB
src
com
tutor
model
Book.java 469B
http
HttpClientConnector.java 3KB
Config.java 240B
xmlutil
PullParseXml.java 5KB
DomParseXml.java 3KB
FileCoding.java 3KB
SaxParseXml.java 5KB
CreateXmlFile.java 2KB
xml
XmlDemo.java 3KB
.project 843B
.classpath 955B
lib
cpdetector_1.0.8.jar 50KB
antlr-2.7.4.jar 379KB
jargs-1.0.jar 18KB
chardet-1.0.jar 36KB
project.properties 360B
AndroidManifest.xml 905B
共 62 条
- 1
TT5267621
- 粉丝: 154
- 资源: 41
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python的pyqt5写的图书管理系统期末大作业源码带文档设计.zip
- pcff_interface_v1_5.off
- apk.tw_LineLite_v8a_v.2.17.1_sign.apk
- Elasticsearch实战:构建高效搜索系统的秘诀.zip
- HTML+CSS+JS网页设计:从入门到精通.zip
- 数据库课程设计:从理论到实践的全面指南.zip
- Python闭包:深入理解与应用场景解析.zip
- Win64OpenSSL-3-3-0.exe
- 课高分程设计-基于C++实现的民航飞行与地图简易管理系统-南京航空航天大学
- 航天器遥测数据故障检测系统python源码+文档说明+数据库(课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页