Sax解析:流的方式进行解析
流解析:以流的方式进行解析(一行一行解析)
Dom解析:加载整个文档,以树的方式解析
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class XmlTest01 {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
PHandler pHandler = new PHandler();
saxParser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("p.xml"), pHandler);
List<Person> persons = pHandler.getPersonList();
for (int i = 0; i < persons.size(); i++) {
System.out.println(persons.get(i).getName());
System.out.println(persons.get(i).getAge());
}
}
}
class PHandler extends DefaultHandler {
private List<Person> personList;
private Person person;
private String tag;
public List<Person> getPersonList() {
return personList;
}
@Override
public void startDocument() throws SAXException {
personList = new ArrayList<>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println(qName + "解析开始");
if (null != qName) {
tag = qName;
if (qName.equals("person")) {
person = new Person();
}
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (tag != null) {
String content = new String(ch, start, length).trim();
if (tag.equals("name")) {
if (content.length() > 0)
person.setName(content);
}
if (tag.equals("age")) {
if (content.length() > 0)
person.setAge(Integer.valueOf(content));
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println(qName + "解析结束");
if (qName != null) {
if (qName.equals("person")) {
personList.add(person);
}
}
tag = null;
}
}
<?xml version="1.0" encoding="utf-8"?>
<persons>
<person>
<name>kari</name>
<age>1000</age>
</person>
<person>
<name>sakara</name>
<age>7000</age>
</person>
</persons>
网友评论