主体代码:
package cn.sxt.server;
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.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class TestXml {
public static void main(String[] args) throws Exception, SAXException {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parse = factory.newSAXParser();
BookHandler bookhandler = new BookHandler();
parse.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("cn/sxt/server/books.xml"),
bookhandler);
List<books> bb = bookhandler.getBookl();
for (books book : bb) {
System.out.println(book.getName()+"的价格为:"+book.getPrice()+"作者为:"+book.getCourse());
}
}
}
class BookHandler extends DefaultHandler {
private List<books> bookl;
private books b;
private String flag;
@Override
public void startDocument() throws SAXException {
bookl = new ArrayList<>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(null!=qName) {
flag = qName;
if (flag.equals("book")) {
b = new books();
}
}
}
public List<books> getBookl() {
return bookl;
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String contents = new String(ch, start, length);
if (flag.equals("name")) {
b.setName(contents);
} else if (flag.equals("course")) {
b.setCourse(contents);
} else if (flag.equals("price")) {
b.setPrice(Integer.valueOf(contents));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if(null!=qName) {
if (qName.equals("book")) {
bookl.add(b);
}
}
flag=null;
}
@Override
public void endDocument() throws SAXException {
}
}
解析的xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
<!ELEMENT books (book+)>
<!ELEMENT book (name, course, price)>
<!ATTLIST book id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<books>
<book id="1">
<name>java</name>
<course>张三</course>
<price>89</price>
</book>
<book id="2">
<name>sql</name>
<course>李四</course>
<price>58</price>
</book>
<book id="3">
<name>Oracle</name>
<course>王五</course>
<price>40</price>
</book>
</books>
book类:
package cn.sxt.server;
public class books {
private String name;
private String course;
private int price;
public books() {
}
public books(String name, String course, int price) {
super();
this.name = name;
this.course = course;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}