자바 xml 데이터, 속성 파싱(java xml parsing data, attribute)
안녕하세요.
오랜만에 자바관련 포스팅을 합니다.
나중에도 요긴하게 쓰일거같아 기본 코딩만 해두고 포스팅하려고 합니다.
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 문서의 복잡도는 상당한것들이 많습니다.
그런것들은 직접 알고리즘을 구현하여 체계적인 코딩 하시기 바랍니다.
결과