大体分两步:
第一步:创建SAXParserFactory
获得SAXParser
加载xml文件
第二部:创建一个类继承DefaultHandler并重写其中的五个方法,开始解析xml文件
话不多说,直接上代码
xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1">
<name>西游记</name>
<pice>120</pice>
</book>
<book id="2">
<name>红楼梦</name>
<pice>190</pice>
</book>
<book id="3">
<name>水浒传</name>
<pice>200</pice>
</book>
<book id="4">
<name>三国演义</name>
<pice>280</pice>
</book>
</books>
java处理类:
package com.qf.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyDefaultHeader extends DefaultHandler {
Book book;
List<Book> list;
String taglib;
/**
* 文档开始
*/
@Override
public void startDocument() throws SAXException {
list = new ArrayList<>();
}
/**
* 元素开始
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
taglib = qName;
if ("book".equals(qName)) {
book = new Book();
}
for (int i = 0; i < attributes.getLength(); i++) {
if("id".equals(attributes.getQName(i)))
book.setId(attributes.getValue(i));
}
}
/**
* 文本信息
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String attr = new String(ch, start, length);
if ("name".equals(taglib)) {
book.setName(attr);
} else if ("pice".equals(taglib)) {
book.setPice(attr);
}
}
/**
* 元素结束
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
taglib = "";
if ("book".equals(qName)) {
list.add(book);
}
}
/**
* 文档结束
*/
@Override
public void endDocument() throws SAXException {
System.out.println(list);
}
@Test
public void saxXml() {
try {
SAXParserFactory par = SAXParserFactory.newInstance();
SAXParser sax = par.newSAXParser();
sax.parse("src/test.xml", new MyDefaultHeader());
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Book {
private String id;
private String name;
private String pice;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPice() {
return pice;
}
public void setPice(String pice) {
this.pice = pice;
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", pice=" + pice + "]";
}
}
结果输出:
[Book [id=1, name=西游记, pice=120], Book [id=2, name=红楼梦, pice=190], Book [id=3, name=水浒传, pice=200], Book [id=4, name=三国演义, pice=280]]