반응형
이번 포스팅에선 XML파일에도 정말 여러가지 형태가 있겠지만 제가 마주했던 2가지 종류의 XML파일에 대해 JAVA DOM파서로 파싱을 해보도록 하겠습니다.
사실 같은 XML파일이지만 저같은 개발 초보들에겐 일단 막막함부터 느껴집니다.
저와 같은 상황에 있는 분들에게 도움을 드리기 위해 제가 찾아서 수행한 방법들을 소개해드리겠습니다.
먼저 tag와 tag 사이에 데이터가 들어가 있는 형태입니다.
xml파일이 다음과 같이 구성되어 있다고 하겠습니다.
파일명: test.xmlHongGildong 22 Seoul
이 태그와 태그 사이에 데이터가 있는 형태는 제일 처음 제가 xml파싱을 구현할때 해결해야 했던 xml파일이었습니다.
이 xml파일을 먼저 분석해보면 customer는 루트 태그가 될 것입니다. 그리고 그 아래로 name, age, address 태그가 있는 것으로 생각하시면 됩니다.
customer 태그를 잡아서 루트 태그로 놓고 그 아래로 쭉 내려가면서 다른 태그들을 잡으면 되겠습니다.
정리하면 name을 저장하고 싶을 때, 루트 태그 아래에 있는 name 태그를 잡아서 HongGilDong이라는 데이터만 꺼내면 되겠죠. age, address 모두 동일합니다.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = doc = builder.parse("C:\users\test.xml"); NodeList list = doc.getElementsByTagName("Customer"); for(Node node= listTot.item(0).getFirstChild() ; node !=null ; node=node.getNextSibling()) { if(node.getNodeName().equals("name")) { Name = node.getTextContent(); } else if(node.getNodeName().equals("age")) { age = Integer.parseInt(node.getTextContent()); } else if(node.getNodeName().equals("address")) { address = node.getTextContent(); } }
노드를 쭉 따라가면서 노드의 이름이 내가 원하는 태그와 동일한지 비교하고 그 값을 저장하면 됩니다.
예를 들어 name 태그를 잡아서 데이터를 꺼내고싶다면 line 8과 같이 노드 이름과 태그 이름을 비교하고 같다면 line 9 처럼 데이터를 저장하면 됩니다.
물론 저장하고자하는 데이터의 타입에 따라 문자열은 node.getTextcontext(), 숫자는 Integer.parseInt(node.getTextcontext())와 같이 데이터를 꺼내는 방식은 약간 다릅니다.
2) <tag 속성 />
이번엔 태그의 속성을 저장해보도록 하겠습니다.
파일명: test.xml
▶ file 태그의 속성값으로 name과 path가 있고, class 태그의 속성값으로 name이 있습니다. 1번과는 다르게 태그 안에 값이 들어있죠? 1번이 태그의 값을 꺼냈다면 이번엔 태그 안의 속성을 꺼내게 됩니다. 1번의 형태와는 조금 다른 방식으로 파싱한 데이터를 저장하게 되겠죠.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = doc = builder.parse("C:\users\test.xml"); NodeList fileList; fileList = doc.getElementsByTagName("file"); for(int i=0 ; i<fileList.getLength() ; i++) { Node fileNode = fileList.item(i); Element fileElement = (Element)fileNode; name = fileElement.getAttribute("name") path = fileElement.getAttribute("path") NodeList classList = fileElement.getElementsByTagName("class"); for(int j=0 ; j<classeList.getLength() ; j++) { Node classNode = classList.item(j); Element classElement = (Element)classNode; name = classElement.getAttribute("name"); } }
▶ 태그를 사용하여 NodeList를 만드는 방식은 동일하지만 Element를 생성하여 그 Element의 속성을 빼내는 방식으로 데이터를 저장합니다. line 10은 file 태그로 Element를 생성하는 코드이며 line 12~13은 그 Element의 속성을 빼내서 저장하는 코드입니다.
처음엔 파싱이라는 단어에서 부담감이 느껴졌지만 막상 찾아보니 참 별 거 아니었습니다.
모두 성공하셨기를 바랍니다.
다음 2편에서는 xml파일에 특수문자가 있어 위와 같은 방법으로는 파싱할 수 없는 경우에 대해서 소개해드리겠습니다.
반응형
'IT > Language' 카테고리의 다른 글
JAVA - 오라클 DB에 쿼리 날리기( INSERT, DELETE, UPDATE) (0) | 2017.12.07 |
---|---|
JAVA - 오라클 트랜잭션(Transaction) 명령어 - COMMIT, ROLLBACK, SAVEPOINT (0) | 2017.12.06 |
Java DOM파서 3편 - "<"를 가진 xml파일 파싱하기(특수문자 치환) (0) | 2017.12.05 |
오라클 시퀀스(Sequence) 사용 및 .NEXTVAL 초기화 (0) | 2017.12.03 |
Java DOM파서 2편 - 특수문자가 있는 XML파싱하기 (0) | 2017.12.01 |