<?xml version="1.0" encoding="UTF-8"?>
<People>
<person>
<age>30</age>
<name>홍길동</name>
<gender>Male</gender>
</person>
<person>
<age>29</age>
<name>김철수</name>
<gender>Male</gender>
</person>
<person>
<age>25</age>
<name>김영희</name>
<gender>Female</gender>
</person>
<person>
<age>32</age>
<name>김영심</name>
<gender>Female</gender>
</person>
</People>
위 내용은 C:\에 작성한 userList.xml파일의 내용이다.
package saxparse;
public class Person {
private int age;
private String name;
private String gender;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + ", gender=" + gender + "]";
}
}
PersonDto.java
package saxparse;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class PeopleSaxHandler extends DefaultHandler {
// 파싱한 사람객체를 넣을 리스트
private List<PersonDto> personDtoList;
// 파싱한 사람객체
private PersonDto personDto;
// character 메소드에서 자장할 문자열 변수
private String str;
public PeopleSaxHandler() {
personDtoList = new ArrayList<PersonDto>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// 시작 태그를 만났을 때 발생하는 이벤트
if(qName.equals("person")) {
personDto = new PersonDto();
personDtoList.add(personDto);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// 끝 태그를 만났을 때
if(qName.equals("age")) personDto.setAge(Integer.parseInt(str));
else if(qName.equals("name")) personDto.setName(str);
else if(qName.equals("gender")) personDto.setGender(str);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// 태그와 태그 사이의 내용을 처리
str = new String(ch, start, length);
}
public List<PersonDto> getPersonDtoList() {
return personDtoList;
}
public void setPersonDtoList(List<PersonDto> personDtoList) {
this.personDtoList = personDtoList;
}
}
위 코드는 xml의 태그를 만났을 때 처리할 메소드를 담은 클래스.
package saxparse;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class Main {
public static void main(String[] args) {
File file = new File("C:/userList.xml");
SAXParserFactory factroy = SAXParserFactory.newInstance();
try {
SAXParser parser = factroy.newSAXParser();
PeopleSaxHandler handler = new PeopleSaxHandler();
parser.parse(file, handler);
List<PersonDto> pList = handler.getPersonDtoList();
for(PersonDto personDto : pList) {
System.out.println("personDto : " + personDto.toString());
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
실행
아래는 결과
출처:
sangwoo0727.github.io/java/JAVA-29_SAXParser/
'자바' 카테고리의 다른 글
[자바] 추상 클래스 예제 (0) | 2021.02.11 |
---|---|
Factory Method 패턴 (0) | 2021.02.07 |
@Qualifier (0) | 2020.12.24 |
Properties (0) | 2020.12.05 |
JAXB (0) | 2020.12.05 |