보통 JSON/XML 파일 및 데이터를 읽는 작업이 자주있습니다.
예전에 샘플링으로 JSON 관련 포스팅을 다룬적이 있습니다.
2014/10/06 - [코드저장소/java] - JSON 라이브러리를 이용하여 object생성과 문자열을 object형으로 변환해보기
이번포스팅은 XML 파일 및 xml API 통신으로 받은 데이터를
읽어오는 샘플링을 진행해보도록 하겠습니다.
JDK 1.7로 진행을 합니다.
하위 버전에 해당 라이브러리가 존재하지 않을경우
xml-apis 관련 jar파일 및 maven dependency를 추가해주셔야 할것입니다.
이클립스에서 자바프로젝트 생성 후 src디렉토리에 test 패키지 생성 후
내부에 text.xml을 하나 생성한 다음 다음과 같은 샘플코드를 작성해보았습니다.
<?xml version="1.0" encoding="UTF-8"?> <root> <blog> <title><![CDATA[개발로짜]]></title> <link>http://hellogk.tistory.com</link> </blog> <blog> <title><![CDATA[국이]]></title> <link>http://guklife.tistory.com</link> </blog> </root>
이어서 test 패키지내부에 Test.java 클래스파일을 생성하여 다음과 같이 샘플코드를 작성해보았습니다.
public class Test { public static void main(String ar[]) { try { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document xml = null; //XML DOCUMENT 획득 xml = documentBuilder.parse(ClassLoader.getSystemResource("test/test.xml").toURI().toString()); //Root엘리먼트 획득 Element element = xml.getDocumentElement(); //Root엘리먼트의 자식 노드목록 획득(blog xml 태그) NodeList list = element.getChildNodes(); //자식노드가 1개이상일경우 if(list.getLength() > 0) { //반복문 이용 for(int i=0; i<list.getLength(); i++) { //blog xml태그의 자식태그 한번 더 획득 NodeList childlist = list.item(i).getChildNodes(); //마찬가지로 자식노드 1개이상일경우 if(childlist.getLength() > 0) { for(int j=0; j<childlist.getLength(); j++) { //blog xml 태그내에 존재하는 태그들의 태그명 + 태그에 속하는 내용 출력 System.out.println("XML태그명:"+childlist.item(j).getNodeName()+",XML값:"+childlist.item(j).getTextContent()); } } } } } catch (Exception e) { e.printStackTrace(); } } }
코드 작성 후 실행을 해본결과 이클립스 콘솔에 하단과 같이 출력되었습니다.
XML태그명:#text,XML값: XML태그명:title,XML값:개발로짜 XML태그명:#text,XML값: XML태그명:link,XML값:http://hellogk.tistory.com XML태그명:#text,XML값: XML태그명:#text,XML값: XML태그명:title,XML값:국이 XML태그명:#text,XML값: XML태그명:link,XML값:http://guklife.tistory.com XML태그명:#text,XML값:
태그명에 존재하지도 않는 "#text" 태그가 출력되었습니다.
위 태그는 white-space(공백) 을 노드의 일부로 인식을 하여 출력하는데
이부분은 제외해야 하므로 조건문을 하나 더 추가하여 다시 한번 출력해보도록 하겠습니다.
기존 System.out.println 부분에 다음과 같은 조건을 추가적용 해주세요
if(Node.TEXT_NODE !=childlist.item(j).getNodeType()){ System.out.println(childlist.item(j).getNodeName()+":"+childlist.item(j).getTextContent()); }
title:개발로짜 link:http://hellogk.tistory.com title:국이 link:http://guklife.tistory.com
#text white-space 부분은 제외하고 출력이 되었습니다.
이어서 외부 url의 일명:API 통신을 이용하여 데이터를 출력해보도록 하겠습니다.
네이버블로그 RSS도 XML 규격으로 만들어져있으므로 RSS로 진행 해보도록 하겠습니다.
호출 RSS URL : http://blog.rss.naver.com/w3labs.xml (미래웹기술연구소 네이버 블로그 RSS 샘플)
브라우저로 RSS 규격을 확인해보도록 하겠습니다.
rss태그가 ROOT ELEMENT이고
자식첫번째 노드는 channel 태그인대 이태그는 한개만 존재하며
자식노드를 한번 더 들어가 item 태그에 존재하는
title / description 태그의 값들을 콘솔로 출력해보도록 하겠습니다.
public static void main(String ar[]) { try { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document xml = null; //XML DOCUMENT 획득 xml = documentBuilder.parse("http://blog.rss.naver.com/w3labs.xml"); //Root엘리먼트 획득 Element element = xml.getDocumentElement(); //Root엘리먼트의 channel 자식태그는 1개이므로 item(0)으로 획득 Node channelNode = element.getElementsByTagName("channel").item(0); //channel태그내에 존재하는 자식태그 획득 NodeList list = channelNode.getChildNodes(); for(int i=0; i<list.getLength(); i++) { //image,link,title.. 여러개 태그 중 item 태그만 획득 if(list.item(i).getNodeName().equals("item")) { //item 태그의 자식노드 획득 NodeList list2 = list.item(i).getChildNodes(); for(int j=0;j<list2.getLength();j++) { //자식태그가 title/description일경우에만 태그명 + 값을 출력 if(list2.item(j).getNodeName().equals("title") || list2.item(j).getNodeName().equals("description")){ String content = list2.item(j).getTextContent(); //줄바꿈이 되어있으므로 \n replaceall content = content.replaceAll("\n", ""); System.out.println("========== 출력시작 ================="); System.out.println("name:"+list2.item(j).getNodeName()); System.out.println("value:"+content); System.out.println("========== 출력종료 ================="); } } } } } catch (Exception e) { e.printStackTrace(); } }
========== 출력시작 ================= name:title value:Sencha Ext JS Training ! 9월 부터는 Ext JS 5 강좌를 시작합니다.! ========== 출력종료 ================= ========== 출력시작 ================= name:description value:9월 ExtJS 5 Training 5일과정반응형 레이아웃, 접근성 지원, 플랫테마, 태블릿 지원, 센차 터치 차트 내장등 한층 업그레이드된 ExtJS 5 를 경험하세요!수강정보날짜 : 2014년 9월 15일(월) ~ 9월 19일(금) 10:00 ~ 18:00장소 :지하철 2호선 홍대입구역 5분거리 (서울시 마포구 서교동 352-31 희승빌딩 2층)비용 : 150만원 (부가세 별도)문의 : 미래웹기술연구소edu@miraeweb.com070-4259-2739Ext JS 5 런칭 기념! 수강생 전원에게 5만원권 백화점 상품권을 드립니다.주요내용OverviewSetup & SettingGetting StartDevuggingApplication StructureClass SystemComponent ClassLayouts & ContainerDom HandlingEventModel, Store and For....... ========== 출력종료 ================= ========== 출력시작 ================= name:title value:센차 아키텍트 3.1의 릴리즈를 발표하다 ========== 출력종료 ================= ========== 출력시작 ================= name:description value:센차 아키텍트 3.1의 릴리즈를 발표하다 2014년 8월 7일|애런 콘랜 센차와 아키텍트 팀 전체를 대표해 뿌듯한 마음으로 센차 아키텍트 3.1의 릴리즈를 발표합니다. 센차 아키텍트 3.1에는 여러 가지 새로운 기능이 생겼고, 그 중에서도 주목할 만한것은 Ext JS 5 지원입니다. Ext JS 5가 릴리즈되고얼마 되지 않았지만, 우리는 센차 아키텍트가 Ext JS 5의 새로운 기능을 동등하게 사용하도록 지원하기 시작했습니다. 센차 아키텍트 3.1 조기 액세스 프로그램(EAT: Early Access Program)에참여해주신 모든 분의 노고에 한분 한분 감사드리고 싶습니다. 센차 아키텍트의 Ext JS 5 지원 센차 아키텍트 3.1에....... ========== 출력종료 ================= ========== 출력시작 ================= name:title value:What's New in Ext JS 5.0.1 ========== 출력종료 ================= ========== 출력시작 ================= name:description value:Ext JS 5.0.1의 새로운 기능 2014년 8월 7일|돈 그리핀 오늘, 흥분되는 마음으로 Ext JS 5.0.1의 최종 안정화 버전을 발표합니다!이번 유지 관리 릴리즈에는 센차 커뮤니티의 피드백을 바탕으로 다수의 개선점이 포함되어 있습니다. 어떤 변화들이 있는지 살펴보겠습니다. 접근성 Ext JS 4.2.2부터는 “ext-aria” 패키지를 릴리즈해 접근성에 대한지원을 개선했습니다 (WAI-ARIA1.0표준에 설명된 것과 같이). 애플리케이션의 접근성을 높이는도구를 제공하는 데 중요한 단계이기도 했지만 테스팅 파트너와 얼리 어탭터의 피드백을 통해 배운 점도 많았습니다. Ext JS 5에서는 그 피드백들을 통합해 더 나은 솔....... ========== 출력종료 ================= ========== 출력시작 ================= name:title value:<센차 Ext JS 5>하나로 통합된 플랫폼에서 데스크톱과 모바일 애플리케이션 개발의 능률을 높인다. ========== 출력종료 ================= . . . .
위와같이 정상적으로 "제목 + 설명"에 대한 결과가 출력되었습니다 .
by 개발로짜
[JAVA 샘플] 트위터 앱생성 + twitter4j를 이용하여 타임라인(Timeline) 목록 출력하기 (3) | 2014.11.20 |
---|---|
JAVA opencsv를 이용하여 csv 파일생성하기 (2) | 2014.10.24 |
자바 zxing를 이용하여 QR코드 생성 + 색상코드(hex,rgb,안드로이드그래픽색상) 적용법 (2) | 2014.10.16 |
자바 다운로드 유틸을 만들어서 웹서버에 등록되있는 파일을 다운로드 하자 (5) | 2014.10.07 |
자바 POI를 이용한 엑셀(xls,xlsx)에 들어있는 데이터들 읽어오기 (8) | 2014.10.07 |