안녕하세요.
오랜만에 자바관련 포스팅을 합니다.
나중에도 요긴하게 쓰일거같아 기본 코딩만 해두고 포스팅하려고 합니다.
xml 데이터 파싱을 해보겠습니다.
(java xml parsing data and attribute)
우선 테스트 xml 입니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <info> <person> <name>홍길동</name> <age>25</age> <history> <job id="1" >A</job> <job id="2" >B</job> <job id="3" >C</job> </history> </person> <person> <name>임꺽정</name> <age>22</age> </history> <job id="1" >AA</job> <job id="2" >BB</job> <job id="3" >CC</job> <history> </person> </info>
xml 구조는 테스트로 만든것이기 때문에
이해하기 쉬울 거라 생각됩니다.
제가 구현한 소스 입니다.
import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XmlExtraction { public void getXmlData(File xmlFile) throws Exception { //1.문서를 읽기위한 공장을 만들어야 한다. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); //2.빌더 생성 DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); //3.생성된 빌더를 통해서 xml문서를 Document객체로 파싱해서 가져온다 Document doc = dBuilder.parse(xmlFile); doc.getDocumentElement().normalize();//문서 구조 안정화 Element root = doc.getDocumentElement(); NodeList n_list = root.getElementsByTagName("person"); Element el = null; NodeList sub_n_list = null; //sub_n_list Element sub_el = null; //sub_el Node v_txt = null; String value=""; String[] tagList = {"name", "age", "job"}; for(int i=0; i<n_list.getLength(); i++) { el = (Element) n_list.item(i); for(int k=0; k< tagList.length; k++) { sub_n_list = el.getElementsByTagName(tagList[k]); for(int j=0; j<sub_n_list.getLength(); j++) { sub_el = (Element) sub_n_list.item(j); v_txt = sub_el.getFirstChild(); value = v_txt.getNodeValue(); System.out.println(sub_el.getNodeName() + "::::value="+value); if(sub_el.getAttributes().getNamedItem("id")!=null) System.out.println("id="+ sub_el.getAttributes().getNamedItem("id").getNodeValue() ); } } } } }
import 부분이 헷갈릴수 있어 소스 전부 첨부 하였습니다.
기본 로직은 xml을 파싱 할 수 있는 Document를 만들고
이에 태그명을 입력하여 데이터를 추출하는 과정입니다.
tagList에 선언된 부분이 제가 추출할 태그 입니다.
태그 데이터 추출
1. NodeList에 추출할 태그를 입력한다.
- NodeList n_list = root.getElementsByTagName("person");
2. NodeList에 추출된 노드 하나의 대응하는 Element를 생성한다.
- el = (Element) n_list.item(i);
3. 구하고자 태그의 첫번째 태그로 이동 한 뒤 값을 구한다
(사실 태그가 없지만 프로그램에서 이렇게 인식하는듯)
- v_txt = sub_el.getFirstChild();
-value = v_txt.getNodeValue();
태그의 속성값 구하는 법
sub_el.getAttributes().getNamedItem("id").getNodeValue()
저는 id값을 구했으므로 getNameItem에 id를 써주었습니다.
xml 문서의 복잡도는 상당한것들이 많습니다.
그런것들은 직접 알고리즘을 구현하여 체계적인 코딩 하시기 바랍니다.
결과
'개발 > java,spring' 카테고리의 다른 글
java JAI 파일 확장자 변환 tif -> png (0) | 2018.07.09 |
---|---|
자바 junit 사용하기 (단위테스트) (2) | 2018.02.10 |
자바 리플렉션(java reflection) 클래스 변수, 함수 접근 (2) | 2017.12.14 |
java static 변수에 대한 기초 개념 이해! (2) | 2017.10.12 |
자바 가상머신(jvm) 메모리 모델, 개념 이해하기 (0) | 2017.09.24 |
자바 선택정렬(select sort) (0) | 2017.09.16 |
이클립스를 통한 라이브러리 추가 및 jdk 버전 변경하기 (4) | 2017.09.08 |