XML:Extensible Markup Language,可扩展标记语言,左卫门数据的一种存储格式或用于存储软件的参数,程序解析此配置文件,就可以达到不修改代码就能更改程序的目的。
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person>
<name>至尊宝</name>>
<age>9000</age>
</person>
<person>
<name>白晶晶</name>>
<age>2000</age>
</person>
</persons>
package server.study;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/**
* 熟悉SAX解析流程
* Created by 16114 on 2019/8/22.
*
*/
public class XmlTest01 {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//SAX解析
//1.获取解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//2.从解析工厂获取解析器
SAXParser parser = factory.newSAXParser();
//3.编写处理器
//4.加载文档Document注册处理器
PHandler handler = new PHandler();
//5.解析
parser.parse(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("server/study/p.xml") ,handler);
}
}
class PHandler extends DefaultHandler{
@Override
public void startDocument() throws SAXException {
System.out.println("---解析文档开始---");
}
@Override
public void endDocument() throws SAXException {
System.out.println("---解析文档结束---");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String contents = new String(ch,start,length).trim();
if (contents.length() > 0) {
System.out.println("内容为-->" + contents);
} else {
System.out.println("内容为-->" + "空");
}
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// super.startElement(uri, localName, qName, attributes);
System.out.println(qName+ "--->解析开始 ");
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
//super.endElement(uri, localName, qName);
System.out.println(qName+ "--->解析结束");
}
}
package server.study;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
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;
/**
* 熟悉SAX解析流程
* Created by 16114 on 2019/8/22.
*
*/
public class XmlTest02 {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//SAX解析
//1.获取解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//2.从解析工厂获取解析器
SAXParser parser = factory.newSAXParser();
//3.编写处理器
//4.加载文档Document注册处理器
PersonHandler handler = new PersonHandler();
//5.解析
parser.parse(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("server/study/p.xml") ,handler);
//获取数据
List<Person> persons = handler.getPersons();
for (Person p:persons
) {
System.out.println(p.getName()+"-->"+p.getAge());
}
}
}
class PersonHandler extends DefaultHandler{
private List<Person> persons;
private Person person;
private String tag; //存储操作标签
public List<Person> getPersons() {
return persons;
}
@Override
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
//System.out.println("---解析文档开始---");
}
@Override
public void endDocument() throws SAXException {
//System.out.println("---解析文档结束---");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// super.startElement(uri, localName, qName, attributes);
System.out.println(qName+ "--->解析开始 ");
if (null != qName){
tag = qName; //存储
if (tag.equals("person")){
person = new Person();
}
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String contents = new String(ch,start,length).trim();
if (null != tag) { //处理了空
if (tag.equals("name")) {
person.setName(contents);
} else if (tag.equals("age")) {
if (contents.length() > 0) {
person.setAge(Integer.valueOf(contents));
}
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
//super.endElement(uri, localName, qName);
System.out.println(qName+ "--->解析结束");
if (null != qName) {
if (qName.equals("person")) {
persons.add(person);
}
}
tag = null;
}
}