XML解析步骤
- 获取解析工厂(SAXParserFactory)
- 从解析工厂中获取解析器(SAXParser)
- 解析器加载文档Document(指XML),并注册自定义的处理器(继承至DefaultHandler)
- 可以从自定义的处理器中获取处理后的处理后的数据
XML解析代码
package priv.jse.core.xml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.util.ArrayList;
import java.util.List;
/**
* xml解析
*/
public class XMLTest {
public static void main(String[] args) throws Exception {
// SAX解析
// 获取解析工厂
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
// 从解析工厂获取解析器
SAXParser parser = parserFactory.newSAXParser();
// 编写处理器,加载文档 Document 注册处理器
MyXMLHander hander = new MyXMLHander();
parser.parse(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("test.xml")
, hander);
List<Person> persons = hander.getPersons();
System.out.println(persons.size());
for (Person person : persons) {
System.out.println(person.getAge() + ", " + person.getName());
}
}
}
// 自定义处理器类
class MyXMLHander extends DefaultHandler {
private List<Person> persons;
private Person person;
private String tag;
@Override
public void startDocument () throws SAXException {
System.out.println("文档解析开始...");
persons = new ArrayList<Person>();
}
@Override
public void startElement (String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println(qName + "解析开始...");
tag = qName;
if (qName != null && qName.equals("person")) person = new Person();
}
@Override
public void characters (char ch[], int start, int length) throws SAXException {
String content = new String(ch, start, length).trim();
if (content.length() > 0) {
System.out.println("内容为 --> " + content);
}
if (tag != null) {
if (tag.equals("name")) {
person.setName(content);
} else 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 && qName.equals("person")) {
persons.add(person);
}
tag = null;
}
public List<Person> getPersons() {
return persons;
}
}
class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}