XML解析方法SAX (Java)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yubu_/article/details/60142508

SAX(simple API for XML) 的基本思路:在读取文件内容的过程中,按照XML文件的结构,有规律的发生startElementcharactersendElement这三种动作。

具体操作步骤:

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);

	}

}



猜你喜欢

转载自blog.csdn.net/Yubu_/article/details/60142508