将xml文件作为字符串进行读取
<?xml version= "1.0" encoding= "UTF-8"?>
<persons>
<person id= "23">
<name>李明</name>
<age>30</age>
</person>
<person id= "20">
<name>李向梅</name>
<age>25</age>
</person>
</persons>
<?xml version= "1.0" encoding= "UTF-8"?>
<persons>
<person id= "23">
<name>李明</name>
<age>30</age>
</person>
<person id= "20">
<name>李向梅</name>
<age>25</age>
</person>
</persons>
package com.yanjun.service;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.yanjun.domain.Person;
public class SAXpersonService {
//以输入流的形式获取xml文件,若有错误抛出异常
public List<Person> getPerson(InputStream inputStream ) throws Throwable{
//通过SAX解析工厂(SAXParserFactory)
SAXParserFactory factory = SAXParserFactory.newInstance();
//创建解析器
SAXParser parser = factory.newSAXParser();
//将内部类对象放进parser.parse(inputStream, personParser);第二个参数中
personParser personParser = new personParser();
parser.parse(inputStream, personParser);
//关闭流
inputStream.close();
return personParser.getPerson();
}
//通过内部类的形式对parser.parse(inputStream, handler);中第二个参数进行设置
private final class personParser extends DefaultHandler{
//将解析的数据放入List<Person>中
private List<Person> persons = null;
//做个标签
private String tag = null;
private Person person = null;
// 提供一个getPerson()
public List<Person> getPerson() {
return persons;
}
@Override
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ( "person".equals(localName)) {
person = new Person();
person.setId( new Integer(attributes.getValue(0)));
}
tag = localName;
}
@Override
public void characters( char[] ch, int start, int length)
throws SAXException {
if (tag!= null) {
//通过长度获取文本节点的数据
String data = new String(ch,start,length);
if ( "name".equals(tag)) {
person.setName(data);
} else if ( "age".equals(tag)) {
person.setAge( new Short(data));
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//完成一个部分,将内容加入结合中
if ( "person".equals(localName)) {
persons.add(person);
//再把person=null,重复解析
person = null;
}
// 中途当遇到结束节点时将tag=null
tag = null;
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}
}
}
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.yanjun.domain.Person;
public class SAXpersonService {
//以输入流的形式获取xml文件,若有错误抛出异常
public List<Person> getPerson(InputStream inputStream ) throws Throwable{
//通过SAX解析工厂(SAXParserFactory)
SAXParserFactory factory = SAXParserFactory.newInstance();
//创建解析器
SAXParser parser = factory.newSAXParser();
//将内部类对象放进parser.parse(inputStream, personParser);第二个参数中
personParser personParser = new personParser();
parser.parse(inputStream, personParser);
//关闭流
inputStream.close();
return personParser.getPerson();
}
//通过内部类的形式对parser.parse(inputStream, handler);中第二个参数进行设置
private final class personParser extends DefaultHandler{
//将解析的数据放入List<Person>中
private List<Person> persons = null;
//做个标签
private String tag = null;
private Person person = null;
// 提供一个getPerson()
public List<Person> getPerson() {
return persons;
}
@Override
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ( "person".equals(localName)) {
person = new Person();
person.setId( new Integer(attributes.getValue(0)));
}
tag = localName;
}
@Override
public void characters( char[] ch, int start, int length)
throws SAXException {
if (tag!= null) {
//通过长度获取文本节点的数据
String data = new String(ch,start,length);
if ( "name".equals(tag)) {
person.setName(data);
} else if ( "age".equals(tag)) {
person.setAge( new Short(data));
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//完成一个部分,将内容加入结合中
if ( "person".equals(localName)) {
persons.add(person);
//再把person=null,重复解析
person = null;
}
// 中途当遇到结束节点时将tag=null
tag = null;
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}
}
}
转载于:https://blog.51cto.com/haiyuanxi/984306