SAX解析XMl
来源:互联网 发布:iphone拨号软件 编辑:程序博客网 时间:2024/06/05 19:44
// 载入xml
//1.创建解析工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.得到解析器
SAXParser sp=factory.newSAXParser();
//3.得到读取器
XMLReader reader=sp.getXMLReader();
//4.设置内容处理器 本步骤最重要 第五步已经完成处理了
reader.setContentHandler(new ListHandler());
//5.读取xml文档内容
reader.parse("src/book.xml");
//得到xml文档所有内容
class ListHandler implements ContentHandler{
//遇到开始标签
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
System.out.println("<"+qName+">");
for (int i=0;atts!=null && i<atts.getLength();i++){
String attName=atts.getQName(i);
String attValue=atts.getValue(i);
System.out.println(attName+"="+attValue);
}
}
//标签体内容
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch,start,length));
}
//结束标签
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("</"+qName+">");
}
//此接口有很多方法 此处未用到没写出
}
//获取指定标签
reader.setContentHandler(new TagValueHandler());
// 获取指定标签 作者 的值
class TagValueHandler extends DefaultHandler {
private String currentTag;// 记住当前解析器得到的是什么标签
private int needNumber = 2;// 记住想获取第几个作者标签的值
private int currentNumber;// 当前解析的是第几个
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentTag = qName;
if ("作者".equals(currentTag))
currentNumber++;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if ("作者".equals(currentTag) && currentNumber == needNumber) {
System.out.println(new String(ch, start, length));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentTag = null;
}
}
//将内容封装为bean
reader.setContentHandler(new BeanListHandler());
// 把每一本书封装到一个book对象,并把book对象
class BeanListHandler extends DefaultHandler {
private List<Book> list = new ArrayList<Book>();
public List<Book> getList() {
return list;
}
private String currentTag;
private Book book;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentTag = qName;
if ("书".equals(currentTag)) {
book = new Book();
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if ("书名".equals(currentTag)) {
book.setName(new String(ch, start, length));
}
if ("作者".equals(currentTag)) {
book.setAuthor(new String(ch, start, length));
}
if ("售价".equals(currentTag)) {
book.setPrice(new String(ch, start, length));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equals("书")) {
list.add(book);
book = null;
}
currentTag = null;// 这句有必要不加 报空指针异常
}
}
//将内容封装为bean
// 把每一本书封装到一个book对象,并把book对象
class BeanListHandler extends DefaultHandler {
private List<Book> list = new ArrayList<Book>();
public List<Book> getList() {
return list;
}
private String currentTag;
private Book book;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentTag = qName;
if ("书".equals(currentTag)) {
book = new Book();
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if ("书名".equals(currentTag)) {
book.setName(new String(ch, start, length));
}
if ("作者".equals(currentTag)) {
book.setAuthor(new String(ch, start, length));
}
if ("售价".equals(currentTag)) {
book.setPrice(new String(ch, start, length));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equals("书")) {
list.add(book);
book = null;
}
currentTag = null;// 这句有必要不加 报空指针异常
}
}
- [XML] SAX解析XML
- 【XML】SAX解析XML
- XML解析(SAX解析)
- XML解析:SAX解析
- Study SAX《SAX解析XML》
- 使用SAX解析XML
- 解析xml之--SAX
- SAX解析XML
- SAX解析XML
- xml文件解析-SAX
- 解析xml之--SAX
- 解析xml之--SAX
- 使用SAX解析XML
- XML学习《SAX解析》
- SAX解析XML例子
- java sax 解析 xml
- 使用SAX解析XML
- sax解析xml实例
- 帮助了解当前线程/进程/系统效能的API
- 老鼠走迷官(一)
- 贝塞尔曲线 总结
- 基于Android SDK腾讯微博授权认证实现
- js基本语句
- SAX解析XMl
- stm32快速学习5——串口中断接收
- sciTE设置
- 标准库rand()函数的缺陷以及Blitz++随机数生成的简介
- PHP 【解决】中文乱码问题
- Qt多线程编程中的对象线程与函数执行线程
- stm32快速学习4——串口发送字符
- 1570C旅行(关于路径条数问题)
- Jquery实现无刷新DropDownList联动