版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yubu_/article/details/60142508
SAX(simple API for XML) 的基本思路:在读取文件内容的过程中,按照XML文件的结构,有规律的发生startElement、characters、endElement这三种动作。
具体操作步骤:
1 实现自己的处理器类
public class UserXMLHandler extendsDefaultHandler
2执行解析
FilexmlFile = newFile(StreamTest.class.getResource("/user.xml").getFile());
UserXMLHandleruserXMLHandler = new UserXMLHandler();
SAXParserFactorysaxParserFactory = SAXParserFactory.newInstance();
SAXParsersaxParser = saxParserFactory.newSAXParser();
saxParser.parse(xmlFile,userXMLHandler);
3 获取解析结果
User user =userXMLHandler.getUser();
具体实例。
XML文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<student id="s1" name="tom">
<email>[email protected]</email>
<phone>12333333333</phone>
</student>
自己实现的处理器类
package xml.test;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class StudentXMLHandler extends DefaultHandler {
private Student student;//保存数据
private String content;//中间变量
public Student getStudent(){
return student;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("student".equals(qName)){
student=new Student();
String id=attributes.getValue("id");
String name=attributes.getValue("name");
student.setId(id);
student.setName(name);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
content=new String(ch,start,length);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("email".equals(qName)){
student.setEmail(content);
}else if("phone".equals(qName)){
student.setPhone(content);
}
}
}
SAX代码
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class sax_test {
public static void main(String[] args) throws Exception, IOException {
File xmlFile = new File(sax_test.class.getResource("Students.xml").getFile());
StudentXMLHandler studentXMLHandler=new StudentXMLHandler();
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
saxParser.parse(xmlFile, studentXMLHandler);
Student stu=studentXMLHandler.getStudent();
System.out.println(stu);
}
}