이전에 DocumentBuilder 를 통해 xml 문서를 파싱한 포스팅을 하였습니다.
[개발/java,spring] - 자바 xml 데이터, 속성 파싱(java xml parsing data, attribute)
하지만 이 방식으로 할경우
Doctype 에 파일 정보(파일명, 경로 등)이 적혀있을경우 에러가 발생하였습니다.
그리하여 찾은 것이
Handler를 이용한 xml 파싱 방법 입니다.
xml 내용입니다.
홍길동 25 A B C 임꺽정 22 AA BB CC
그리고 바로 소스 첨부하겠습니다.
XMLParserHandler.java 파일을 생성하였습니다.
package lee.comm.util;
import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class XMLParserHandler extends DefaultHandler {
private String elementName = "";
private StringBuffer sBuffer = new StringBuffer();
private ArrayList tagList = new ArrayList();
// XML 문서의 시작이 인식되었을 때 발생하는 이벤트를 처리
public void startDocument() {
//System.out.println("Start Document");
}
// XML 문서의 끝이 인식되었을 때 발생하는 이벤트를 처리
public void endDocument() {
//System.out.println("End Document");
}
// 엘리먼트의 시작을 인식했었을 때 발생하는 이벤트를 처리
public void startElement(String uri, String localName, String qname, Attributes attr) {
elementName = qname; //element명을 멤버 변수에 넣어 둔다.
int attrCount=attr.getLength(); // 태그 개수
String attrName=attr.getQName(0); // 첫번째 태그 임의 설정
String attrValue=attr.getValue(attrName);
/*
* 활용 예시
if(qname.equals("img")){
int attrCount=attr.getLength(); // 태그 개수
for(int i=0; i9){
String file_nm = attrValue.substring(attrValue.lastIndexOf(".")-6);
tagList.add(file_nm);
}
//System.out.println("속성값=============" + attrName+""+attrValue);
}
}
}
*/
System.out.println("속성값=============" + attrName+"=="+attrValue);
sBuffer.setLength(0); // buffer 초기화
}
// 엘리먼트의 끝을 인식했었을 때 발생하는 이벤트를 처리
public void endElement(String uri, String localName, String qname) {
System.out.println("End element, Name: " + qname);
}
// 각 element의 값 (인식된 문자의 각 세그먼트에 대해서 호출)
public void characters(char[] ch, int start, int length) throws SAXException {
String strValue = "";
// element의 값을 구하기 위해서는 buffer에 인식된 각 문자를 start에서 length만큼 append한다.
sBuffer.append(new String(ch, start, length));
strValue = sBuffer.toString().trim();
if (strValue != null && strValue.length() != 0 && !strValue.equals("\n")) {
System.out.println("elementName: " + elementName + ", strValue: "+ strValue);
}
}
public ArrayList getTagList() {
return tagList;
}
}
소스 끝에 </attrcount;></string></string> 이게 안지워지네요.. 지워서 사용하세요
사용 방법입니다.
File file = new File("src/main/webapp/resources/sample/xmlTest.xml");
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature("http://xml.org/sax/features/external-general-entities", false);
spf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
SAXParser sp = spf.newSAXParser();
XMLParserHandler parserHandler = new XMLParserHandler();
sp.parse(file, parserHandler); // Start Parsi
ArrayList tagList = parserHandler.getTagList(); getTagList는 xml에서 추출한 값들을 따로 사용하기 위함 입니다.
설명들을 적는것보다 소스를 보시고
한번 돌려보시면 이해 될거라 생각됩니다.
아니면 댓글 주시면 성실히 답변드리겠습니다.
태그 및 속성값들이 확인되는 모습을 확인 할 수 있습니다.
'개발 > java,spring' 카테고리의 다른 글
| [선형구조]자료 구조의 개념 정리(리스트, 스택, 큐, 데크) (0) | 2019.09.10 |
|---|---|
| 전자정부 프레임워크에 sqLite3 DB 연결 하기 (2) | 2019.03.15 |
| (공통처리)웹취약성 크로스사이트 스크립트(XSS) 처리하기2_filter chain (8) | 2019.03.14 |
| java JAI 파일 확장자 변환 tif -> png (0) | 2018.07.09 |
| 자바 junit 사용하기 (단위테스트) (2) | 2018.02.10 |
| 자바 리플렉션(java reflection) 클래스 변수, 함수 접근 (2) | 2017.12.14 |
| 자바 xml 데이터, 속성 파싱(java xml parsing data, attribute) (2) | 2017.12.04 |