-
[XML] 003. XML 관찰 실습(3) : 원격지 XML 파일 읽기 (콘솔 기반)SsY/Class 2023. 7. 25. 11:20728x90
XmlApp05
- 기존의 방식대로 로컬로 가져와서 실습※ RSS 란?
- 프로그램이 필요로 하는 xml 파일을
우리가 만든 컴포넌트와 결합하여 DOM 을 컨트롤 (행위,동작) - 엘리먼트를 컨트롤 하는 것에서
직접 매번 우리가 갱신하는 것이 아니라 원격지에서 업데이트 된 파일이 자동으로 갱신되어 받아오는 것
(이 때 보내지는 파일이 xml 파일인 경우가 많다)
ex) 날씨 RSS (기상청 날씨누리 제공)
- rss.xml
- 위에서 얻어온 xml 을 전체복사하여 xml 파일에 2열부터 붙여서 작성한다.
- XMLDOM.java
- 메소드 정의
package com.test.xml; import org.w3c.dom.Element; import org.w3c.dom.Node; public class XMLDOM { public static String getText(Element parent, String tagName) { String result = ""; // 대상 태그(tagName) 객체의 첫 번째 자식 노드 얻어오기 Node node = parent.getElementsByTagName(tagName).item(0); Element element = (Element)node; // 대상 엘리먼트(element)의 자식 노드(텍스트 노드)의 값 얻어오기 result = element.getChildNodes().item(0).getNodeValue(); return result; } }
- XmlDomTest05.java
/*============================================================================ XmlDomTest05.java - 콘솔 기반 자바 프로그램 - XML DOM 활용 → 로컬(local) XML 읽어내기 (rss.xml) ※ 기상청 날씨누리로부터 얻어낸 데이터 https://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109 =============================================================================*/ package com.test.xml; 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 XmlDomTest05 { public static void main(String[] args) { try { // 1. XML 파일 메모리에 로드 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); String url = "rss.xml"; Document xmlObj = builder.parse(url); // 2. 루트 엘리먼트 접근 Element root = xmlObj.getDocumentElement(); // 3-1. 타이틀 추출하기 Node itemNode = root.getElementsByTagName("item").item(0); Element itemElement = (Element)itemNode; System.out.printf("%s%n%n", XMLDOM.getText(itemElement, "title")); // 3-2. 기상전망 추출하기 Node wfNode = root.getElementsByTagName("wf").item(0); Element wfElement = (Element)wfNode; System.out.println("[기상전망]-------------------------------------------------------"); System.out.printf("%s%n%n", wfElement.getTextContent().replaceAll("<br />", "\n")); // 3-3. 도시별 기상 예보 추출하기 System.out.println("[육상날씨]-------------------------------------------------------"); NodeList locationNodeList = root.getElementsByTagName("location"); for (int i=0; i<locationNodeList.getLength(); i++) { Node locationNode = locationNodeList.item(i); Element locationElement = (Element)locationNode; System.out.printf("도시 : %s%n", XMLDOM.getText(locationElement, "city")); System.out.println("-----------------------------------------------------------"); NodeList dataNodeList = locationElement.getElementsByTagName("data"); for (int j=0; j<dataNodeList.getLength(); j++) { Node dataNode = dataNodeList.item(j); Element dataElement = (Element)dataNode; System.out.printf(" %s / %s / %s℃ ~ %s℃ / 강수 %s%%%n" , XMLDOM.getText(dataElement, "tmEf") // 날짜 시간 , XMLDOM.getText(dataElement, "wf") // 날씨 예보 , XMLDOM.getText(dataElement, "tmn") // 최저 온도 , XMLDOM.getText(dataElement, "tmx") // 최고 온도 , XMLDOM.getText(dataElement, "rnSt")); // 강수 확률 } System.out.println("-----------------------------------------------------------"); } } catch (Exception e) { System.out.println(e.toString()); } } } // 실행 결과 /* 서울,경기도 육상 중기예보 - 2023년 07월 25일 (화)요일 06:00 발표 [기상전망]------------------------------------------------------- ○ (강수) 28일(금) 오후에 소나기, 29일(토) 오후~30일(일) 오전은 비가 오는 곳이 있겠습니다. ○ (기온) 이번 예보기간 아침 기온은 23~26도로 평년(최저기온 22~24도)과 비슷하거나 조금 높겠고, 낮 기온은 28~33도로 평년(최고기온 29~33도)과 비슷하겠습니다. ○ (해상) 서해중부해상의 물결은 30일(일) 오후~31일(월) 오전, 8월 3일(목)은 1.5~2.5m, 그 밖의 날은 0.5~2.0m로 일겠습니다. ○ (주말 전망) 29일(토) 오후~30일(일) 오전은 비가 오겠습니다. 아침 기온은 23~25도, 낮 기온은 29~33도가 되겠습니다. * 이번 예보기간에는 제5호 태풍(독수리)의 이동경로와 북태평양고기압의 확장정도에 따라 강수구역이 변경될 가능성이 있으니, 앞으로 발표되는 예보를 참고하기 바랍니다. [육상날씨]------------------------------------------------------- 도시 : 서울 ----------------------------------------------------------- 2023-07-28 00:00 / 구름많음 / 25℃ ~ 32℃ / 강수 30% 2023-07-28 12:00 / 구름많고 소나기 / 25℃ ~ 32℃ / 강수 70% 2023-07-29 00:00 / 흐림 / 25℃ ~ 31℃ / 강수 40% 2023-07-29 12:00 / 흐리고 비 / 25℃ ~ 31℃ / 강수 60% 2023-07-30 00:00 / 흐리고 비 / 25℃ ~ 31℃ / 강수 60% 2023-07-30 12:00 / 흐림 / 25℃ ~ 31℃ / 강수 40% 2023-07-31 00:00 / 흐림 / 25℃ ~ 31℃ / 강수 40% 2023-07-31 12:00 / 흐림 / 25℃ ~ 31℃ / 강수 40% 2023-08-01 00:00 / 구름많음 / 25℃ ~ 32℃ / 강수 30% 2023-08-01 12:00 / 구름많음 / 25℃ ~ 32℃ / 강수 30% 2023-08-02 00:00 / 흐림 / 26℃ ~ 32℃ / 강수 40% 2023-08-03 00:00 / 흐림 / 25℃ ~ 32℃ / 강수 40% 2023-08-04 00:00 / 흐림 / 25℃ ~ 31℃ / 강수 40% ----------------------------------------------------------- 도시 : 인천 ----------------------------------------------------------- 2023-07-28 00:00 / 구름많음 / 25℃ ~ 30℃ / 강수 30% 2023-07-28 12:00 / 구름많고 소나기 / 25℃ ~ 30℃ / 강수 70% 2023-07-29 00:00 / 흐림 / 25℃ ~ 29℃ / 강수 40% 2023-07-29 12:00 / 흐리고 비 / 25℃ ~ 29℃ / 강수 60% 2023-07-30 00:00 / 흐리고 비 / 25℃ ~ 29℃ / 강수 60% 2023-07-30 12:00 / 흐림 / 25℃ ~ 29℃ / 강수 40% 2023-07-31 00:00 / 흐림 / 25℃ ~ 30℃ / 강수 40% 2023-07-31 12:00 / 흐림 / 25℃ ~ 30℃ / 강수 40% 2023-08-01 00:00 / 구름많음 / 25℃ ~ 31℃ / 강수 30% 2023-08-01 12:00 / 구름많음 / 25℃ ~ 31℃ / 강수 30% 2023-08-02 00:00 / 흐림 / 25℃ ~ 31℃ / 강수 40% 2023-08-03 00:00 / 흐림 / 25℃ ~ 29℃ / 강수 40% 2023-08-04 00:00 / 흐림 / 24℃ ~ 28℃ / 강수 40% ----------------------------------------------------------- 도시 : 수원 : : : 도시 : 여주 ----------------------------------------------------------- 2023-07-28 00:00 / 구름많음 / 23℃ ~ 31℃ / 강수 30% 2023-07-28 12:00 / 구름많고 소나기 / 23℃ ~ 31℃ / 강수 70% 2023-07-29 00:00 / 흐림 / 23℃ ~ 31℃ / 강수 40% 2023-07-29 12:00 / 흐리고 비 / 23℃ ~ 31℃ / 강수 60% 2023-07-30 00:00 / 흐리고 비 / 23℃ ~ 31℃ / 강수 60% 2023-07-30 12:00 / 흐림 / 23℃ ~ 31℃ / 강수 40% 2023-07-31 00:00 / 흐림 / 24℃ ~ 31℃ / 강수 40% 2023-07-31 12:00 / 흐림 / 24℃ ~ 31℃ / 강수 40% 2023-08-01 00:00 / 구름많음 / 23℃ ~ 32℃ / 강수 30% 2023-08-01 12:00 / 구름많음 / 23℃ ~ 32℃ / 강수 30% 2023-08-02 00:00 / 흐림 / 24℃ ~ 31℃ / 강수 40% 2023-08-03 00:00 / 흐림 / 23℃ ~ 30℃ / 강수 40% 2023-08-04 00:00 / 흐림 / 24℃ ~ 30℃ / 강수 40% ----------------------------------------------------------- */
XmlApp06
- 원격 (remote) 에서 xml 받아오기 실습- XMLDOM
- 05 와 동일 - XmlDomTest06.java
/*============================================================================ XmlDomTest06.java - 콘솔 기반 자바 프로그램 - XML DOM 활용 → 원격(remote) XML 읽어내기 ※ 기상청 날씨누리로부터 데이터 수신 https://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109 =============================================================================*/ /* stnId=108 // 전국 stnId=109 // 서울,경기 stnId=105 // 강원 stnId=131 // 충북 stnId=133 // 충남 stnId=146 // 전북 stnId=156 // 전남 stnId=143 // 경북 stnId=159 // 경남 stnId=184 // 제주특별자치도 */ package com.test.xml; import java.net.URL; // check import java.util.Scanner; 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; import org.xml.sax.InputSource; // check public class XmlDomTest06 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] stnId = {"108", "109", "105", "131", "133", "146", "156", "143", "159", "184"}; do { try { DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); Document xmlObj = null; // Local XML 파일인 경우... /* String url = "rss.xml"; xmlObj = builder.parse(url); */ // Remote XML 파일인 경우 // 외부의 입력값 처리 System.out.println("■■■ 기상청 중기 예보 ■■■"); System.out.println("--------------------------------"); System.out.println("1.전국 "); System.out.println("2.서울,경기 "); System.out.println("3.강원 "); System.out.println("4.충북 "); System.out.println("5.충남 "); System.out.println("6.전북 "); System.out.println("7.전남 "); System.out.println("8.경북 "); System.out.println("9.경남 "); System.out.println("10.제주특별자치도"); System.out.println("--------------------------------"); System.out.print(">> 지역 선택(종료 0) : "); String m = sc.next(); if (m.equals("0")) break; String str = String.format("https://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=%s" , stnId[Integer.parseInt(m)-1]); // 확인 //System.out.println("str : " + str); //--==>> str : https://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109 // (→ 2. 서울, 경기 선택 시) //--==>> str : https://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=146 // (→ 6. 전북 선택 시) // URL 객체 구성 → 절대 경로 지정 방식 URL url = new URL(str); //-- URL 로 접근하겠다... // URL 로 접근하여 XML 의 데이터 내용 읽어오기 (스트림) InputSource is = new InputSource(url.openStream()); // ---------------- 스트림 // ---------- 스트림으로 읽어올 수 있도록 모듈화 시켜놓은 것 //-- InputSource 를 통해서 스트림으로 XML 을 읽어오는 것 //-- 미리 다운받아두는 형태가 아니기 때문에 //-- 수신하고 있는 내용들을 처리를 해야한다는 것 확인!!! xmlObj = builder.parse(is); //---------------------------- 이 이후로는 로컬과 동일! // 2. 루트 엘리먼트 접근 Element root = xmlObj.getDocumentElement(); //System.out.printf("%s%n", root.getNodeName()); //--==>> rss // 3-1. 타이틀 추출하기 Node titleNode = root.getElementsByTagName("item").item(0); Element titleElement = (Element)titleNode; System.out.printf("%s %n", XMLDOM.getText(titleElement, "title")); //--==>> 전국 육상 중기예보 - 2023년 07월 25일 (화)요일 06:00 발표 // 3-2. 기상전망 추출하기 Node wfNode = root.getElementsByTagName("wf").item(0); Element wfElement = (Element)wfNode; System.out.println("[기상 전망]======================================================"); System.out.printf("%s%n%n", wfElement.getTextContent().replaceAll("<br />", "\n")); //--==>> /* [기상 전망]====================================================== ○ (강수) 28일(금) 오후에 소나기, 29일(토) 오후~30일(일) 오전은 비가 오는 곳이 있겠습니다. ○ (기온) 이번 예보기간 아침 기온은 23~26도로 평년(최저기온 22~24도)과 비슷하거나 조금 높겠고, 낮 기온은 28~33도로 평년(최고기온 29~33도)과 비슷하겠습니다. ○ (해상) 서해중부해상의 물결은 30일(일) 오후~31일(월) 오전, 8월 3일(목)은 1.5~2.5m, 그 밖의 날은 0.5~2.0m로 일겠습니다. ○ (주말 전망) 29일(토) 오후~30일(일) 오전은 비가 오겠습니다. 아침 기온은 23~25도, 낮 기온은 29~33도가 되겠습니다. * 이번 예보기간에는 제5호 태풍(독수리)의 이동경로와 북태평양고기압의 확장정도에 따라 강수구역이 변경될 가능성이 있으니, 앞으로 발표되는 예보를 참고하기 바랍니다. */ // 3-3. 도시별 기상 예보 추출하기 System.out.println("[육상 날씨]======================================================"); NodeList locationNodeList = root.getElementsByTagName("location"); for (int j=0; j<locationNodeList.getLength(); j++) { Node locationNode = locationNodeList.item(j); Element locationElement = (Element)locationNode; System.out.printf("도시 : %s%n", XMLDOM.getText(locationElement, "city")); System.out.println("----------------------------------------------------"); NodeList dataNodeList = locationElement.getElementsByTagName("data"); for (int i=0; i<dataNodeList.getLength(); i++) { Node dataNode = dataNodeList.item(i); Element dataElement = (Element)dataNode; System.out.printf(" %s / %s / %s℃ ~ %s℃ / 강수 %s%%%n" , XMLDOM.getText(dataElement, "tmEf") , XMLDOM.getText(dataElement, "wf") , XMLDOM.getText(dataElement, "tmn") , XMLDOM.getText(dataElement, "tmx") , XMLDOM.getText(dataElement, "rnSt") ); } System.out.println("----------------------------------------------------"); } } catch (Exception e) { System.out.println(e.toString()); } } while (true); // break 전까지 무한루프 구성 } } // 실행 결과 /* 전라남,북도 육상 중기예보 - 2023년 07월 25일 (화)요일 06:00 발표 [기상 전망]====================================================== ○ (강수) 28일(금) 오후에 소나기가 오는 곳이 있겠습니다. ○ (기온) 아침 기온은 23~26도, 낮 기온은 29~33도로 평년(최저기온 23~25도, 최고기온 29~33도)과 비슷하겠습니다. ○ (해상) 바다의 물결은 서해남부와 남해서부 해상에서 1~2m로 일겠습니다. ○ (주말전망) 29일(토)~30일(일)은 흐리거나 구름많겠습니다. 아침 기온은 24~25도, 낮 기온은 28~33도가 되겠습니다. * 이번 예보기간에는 제5호 태풍(독수리)의 이동경로와 북태평양고기압의 확장정도에 따라 강수구역이 변경될 가능성이 있으니, 앞으로 발표되는 예보를 참고하기 바랍니다. [육상 날씨]====================================================== 도시 : 전주 ---------------------------------------------------- 2023-07-28 00:00 / 구름많음 / 24℃ ~ 33℃ / 강수 30% 2023-07-28 12:00 / 구름많고 소나기 / 24℃ ~ 33℃ / 강수 70% 2023-07-29 00:00 / 흐림 / 25℃ ~ 33℃ / 강수 40% 2023-07-29 12:00 / 흐리고 비 / 25℃ ~ 33℃ / 강수 60% 2023-07-30 00:00 / 구름많음 / 25℃ ~ 33℃ / 강수 30% 2023-07-30 12:00 / 흐림 / 25℃ ~ 33℃ / 강수 40% 2023-07-31 00:00 / 구름많음 / 25℃ ~ 33℃ / 강수 30% 2023-07-31 12:00 / 구름많음 / 25℃ ~ 33℃ / 강수 40% 2023-08-01 00:00 / 구름많음 / 25℃ ~ 33℃ / 강수 30% 2023-08-01 12:00 / 구름많음 / 25℃ ~ 33℃ / 강수 30% 2023-08-02 00:00 / 흐림 / 25℃ ~ 32℃ / 강수 40% 2023-08-03 00:00 / 흐림 / 25℃ ~ 32℃ / 강수 40% 2023-08-04 00:00 / 흐림 / 25℃ ~ 32℃ / 강수 40% ---------------------------------------------------- 도시 : 군산 : : : 도시 : 부안 ---------------------------------------------------- 2023-07-28 00:00 / 구름많음 / 24℃ ~ 32℃ / 강수 30% 2023-07-28 12:00 / 구름많고 소나기 / 24℃ ~ 32℃ / 강수 70% 2023-07-29 00:00 / 흐림 / 25℃ ~ 32℃ / 강수 40% 2023-07-29 12:00 / 흐리고 비 / 25℃ ~ 32℃ / 강수 60% 2023-07-30 00:00 / 구름많음 / 24℃ ~ 32℃ / 강수 30% 2023-07-30 12:00 / 흐림 / 24℃ ~ 32℃ / 강수 40% 2023-07-31 00:00 / 구름많음 / 24℃ ~ 32℃ / 강수 30% 2023-07-31 12:00 / 구름많음 / 24℃ ~ 32℃ / 강수 40% 2023-08-01 00:00 / 구름많음 / 24℃ ~ 32℃ / 강수 30% 2023-08-01 12:00 / 구름많음 / 24℃ ~ 32℃ / 강수 30% 2023-08-02 00:00 / 흐림 / 24℃ ~ 32℃ / 강수 40% 2023-08-03 00:00 / 흐림 / 25℃ ~ 31℃ / 강수 40% 2023-08-04 00:00 / 흐림 / 25℃ ~ 32℃ / 강수 40% ---------------------------------------------------- */
XmlApp07
- 마지막 콘솔 기반 Remote Xml 받아오기 실습
- 뉴스 속보 Rss- XmlDomTest07.java
/*================================================== XmlDomTest07.java - 콘솔 기반 자바 프로그램 - XML DOM 활용 → 원격(remote) XML 읽어내기 ※ jtbc로부터 뉴스 속보 데이터 수신 https://fs.jtbc.co.kr/RSS/newsflash.xml ===================================================*/ /* title> JTBC News link> https://fs.jtbc.co.kr/RSS/newsflash.xml description> 속보 RSS copyright> Copyright(C) JTBC All rights reserved. 주요기사 -------------------------------------------- title> 강아지 잃어버려놓고…영업 방해로 고소한다는 애견호텔|신유진 변호사 [상클 상담소] description> ■ 인용보도 시 프로그램명 'JTBC 상암동 클라스'를 밝혀주시.... link> https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136591 pubDate> 2023.07.25 title> '짠당포' 김태원X임형준X박영진, 짠내 배틀 1인자는 누구? description> 연예계 짠내 아이콘 3인방 김태원, 임형준, 박영진이 '짠당포'에 출연한... link> https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136627 pubDate> 2023.07.25 : */ package com.test.xml; import java.net.URL; 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; import org.xml.sax.InputSource; public class XmlDomTest07 { public static void main(String[] args) { /* 1. 원격 XML 정보를 요청하고, 그 결과를 메모리에 로드 → XML DOM 구성 - DB 활용 - DBF 활용 - XML 로딩 2. 루트 엘리먼트 접근 3. 특정 하위 엘리먼트 접근 4. 텍스트 노드 접근 → 필요한 데이터 획득 5. 결과 처리 (출력) */ try { // ※ DOM (Document Object Model) // - XML 이나 HTML Document(문서)를 응용프로그램에서 사용하기 위한 API 규격 // - DOM 은 Document (문서)의 각 부분들을 객체(Object)로 표현한 API // ※ DOM 파서 (Document Object Model Parser) // - XML 문서를 읽고, 해석한 후 // 해석한 결과를 메모리에 DOM 객체 트리 구조로 생성시키는 파서(Parser) // - 원하는 데이터에 접근할 수 있도록 해주어 검색,수정,삭제 등을 수행할 수 있도록 지원 // ※ 주로 사용되는 DOM 인터페이스(Document Object Model Interface) // - Node // : 모든 객체의 부모 인터페이스로서 공통적으로 기능하는 함수를 가진다. // - Node List // : 노드들을 리스트로 받아 처리하기 쉽도록 한 객체 유형 (일괄 처리) // - Document // : DOM (Document Object Model) 트리 구조의 최상위 노드로 XML 문서 자체를 의미한다. // - Element // : XML 문서의 엘리먼트에 해당하는 객체 유형 // - Attr // : XML 문서의 Attribute 에 대항하는 객체 유형 // - CharacterData // : XML 문서의 데이터에 해당하는 객체 유형 // - Text // : 문자 데이터(내용)에 해당하는 객체 유형 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //-- 『DocumentBuilderFactory』 // DocumentBuilder (DOM Parser) 를 생성할 수 있도록 지원하는 Factory 클래스(객체) DocumentBuilder builder = factory.newDocumentBuilder(); //-- 『DocumentBuilder』 // DOM Parser 객체의 클래스 Document xmlObj = null; String str = "https://fs.jtbc.co.kr/RSS/newsflash.xml"; URL url = new URL(str); InputSource is = new InputSource(url.openStream()); xmlObj = builder.parse(is); // 루트 엘리먼트 접근 Element root = xmlObj.getDocumentElement(); // 확인 //System.out.println(root.getNodeName()); //--==>> rss Element channelElement = (Element)root.getElementsByTagName("channel").item(0); System.out.printf("title > %s%n" , XMLDOM.getText(channelElement,"title")); System.out.printf("link > %s%n" , XMLDOM.getText(channelElement,"link")); System.out.printf("description > %s%n" , XMLDOM.getText(channelElement,"description")); System.out.printf("copyright > %s%n" , XMLDOM.getText(channelElement,"copyright")); System.out.println(); System.out.println("주요 기사 ------------------------------------------"); NodeList itemNodes = channelElement.getElementsByTagName("item"); for (int i=0; i<itemNodes.getLength(); i++) { Element itemElement = (Element)itemNodes.item(i); System.out.printf("%ntitle > %s%n" , XMLDOM.getText(itemElement,"title")); System.out.printf("description > %s%n" , XMLDOM.getText(itemElement,"description")); System.out.printf("link > %s%n" , XMLDOM.getText(itemElement,"link")); System.out.printf("pubDate > %s%n" , XMLDOM.getText(itemElement,"pubDate")); } } catch (Exception e) { System.out.println(e.toString()); } } } // 실행 결과 /* title > JTBC News link > https://fs.jtbc.co.kr/RSS/newsflash.xml description > 속보 RSS copyright > Copyright(C) JTBC All rights reserved. 주요 기사 ------------------------------------------ title > "이웃이잖아요" 아픈 택배기사에게 손 내민 아파트 주민들 description > [앵커]함께 택배 일을 하던 남편이 갑자기 가슴 통증을 호소해 병원에 가게 되면서 한 아파트 전체 배송이 중단되자, 부인은 주민들에게 '미안하다'고 연락을 돌렸습니다. 그런데 주민들은 불평 대신, 병원비 보태 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136715 pubDate > 2023.07.25 title > 7월 25일 (화) 뉴스룸 다시보기 description > 이상민 행정안전부 장관에 대한 탄핵이 헌법재판소에서 만장일치로 기각됐습니다. 이태원 참사 이후의 발언들이 매우 부적절했고, 대응 초기에 이 장관이 시간을 허비했다는 의견도 있었습니다만, 재판관 9명 모두 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136734 pubDate > 2023.07.25 title > 살아갈 힘을 준 이웃들…택배기사 부부 "온정에 감사드려요" description > [앵커]함께 택배 일을 하던 남편이 갑자기 가슴 통증을 호소해 병원에 가게 되면서 한 아파트 전체 배송이 중단되자, 부인은 주민들에게 '미안하다'고 연락을 돌렸습니다. 그런데 주민들은 불평 대신, 병원비 보태 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136739 pubDate > 2023.07.25 title > [오늘, 이 장면] 슛인가? 크로스인가?…모호함이 만든 자책골 description > < 보카 주니어스 2:1 뉴웰스 올드보이스|(아르헨티나 프로축구) >이건 누구의 골일까요?슛인지, 크로스인지 모를 어정쩡함이 '최고의 한 수'가 됐습니다. link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136735 pubDate > 2023.07.25 title > [날씨] 밤사이 또 비 내린다…수도권 최대 80㎜ 이상 description > 오늘(25일)도 전국 곳곳에 폭염특보가 내려지면서 무더위가 계속됐습니다.습도가 높다 보니 내일, 최고 체감온도가 33도 이상까지 예상돼 몸으로 느끼는 더위는 더 강하겠습니다.오늘 늦은 밤부터 내일 새벽 사이 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136701 pubDate > 2023.07.25 title > 클로징 description > 뉴스룸 저희가 준비한 소식은 여기까지입니다.시청해주신 여러분, 고맙습니다. link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136700 pubDate > 2023.07.25 title > "중국 축구에 수치 안겨"…'심판 뺨 때린' 감독, 결국 사과 description > 레드카드를 꺼내자 심판의 뺨을 때린 랴오닝 선양 감독, 결국 고개를 숙였습니다."중국 축구에 수치를 안겼다"며 "징계를 달게 받겠다"고 했는데요.규정을 보면 최소 1년 출전 정지, 그리고 3500만원 정도의 벌금이 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136702 pubDate > 2023.07.25 title > 온몸으로 공 가리고 아픈 척…야구에서 연기가 필요할 때 description > < 볼티모어 3:2 필라델피아|미국 프로야구 >중견수의 멋진 다이빙 캐치 보시죠.그런데 옆에서 찍은 영상에 비밀이 숨어 있었는데요.글러브가 바닥에 부딪히자 공이 굴러나왔고, 볼티모어 중견수 힉스가 온몸으로 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136703 pubDate > 2023.07.25 title > "장갑 줄 잘 확인해야지!"…글러브 뚫고 통과한 야구공 description > < 클리블랜드 3:5 캔자스시티|미국 프로야구 >땅볼을 잡은 캔자스시티 유격수가 1루로 공을 던집니다.깔끔하게 아웃인가 싶었는데, 주자가 살았습니다.자세히 볼까요?이럴수가… 줄이 끊어지며, 공이 글러브 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136707 pubDate > 2023.07.25 title > '뒤숭숭한' 분위기 속 황선홍호 첫 소집…이강인 합류는? description > [앵커]이강인은 과연 아시안게임 축구 대표팀에 합류할 수 있을까요? 우리 대표팀이 안고 있는 숙제이자, 팬들이 가장 궁금해하는 부분이기도 합니다. 황선홍 감독은 뭐라고 답했을까요?최종혁 기자가 전해드립니다 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136736 pubDate > 2023.07.25 title > 김하성, MLB 데뷔 '첫 멀티홈런'…발전 비결은 바로 '이것' description > [앵커]그야말로 김하성의 역대급 시즌입니다. 이틀 전, 자신의 최다 홈런 기록을 갈아치우더니, 오늘(25일)은 빅리그 데뷔 후 처음으로 '멀티 홈런'도 기록했습니다.그 비결을 홍지용 기자가 보도합니다.[기자]< 피 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136708 pubDate > 2023.07.25 title > 7월 25일 (화) 뉴스5후 다시보기 description > 이슈의 핵심에 가장 가까이 그리고 쉽게 다가갑니다. 오후의 뉴스 세포를 깨우는 뉴스5후 시작합니다. 헌법재판소가 이상민 행정안전부 장관에 대한 탄핵심판 청구를 기각했습니다. 이 장관은 곧바로 업무에 복귀했 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136654 pubDate > 2023.07.25 title > BTS 정국, 빌보드 정상 안착…높아진 차트 문턱에도 '올 킬' description > [앵커]방탄소년단 BTS의 멤버, 정국의 신곡이 3개의 빌보드 차트에서 모두 1위에 올랐습니다. 빌보드 정상에 오른 한국 가수가 셋이 됐는데, 그룹 방탄소년단, 그리고 멤버 지민과 정국입니다.정재우 기자입니다.[ link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136710 pubDate > 2023.07.25 title > "굿바이 파랑새" 머스크의 모험…'슈퍼앱' 탈바꿈 계획은 과연? description > [앵커]소셜미디어 트위터가 그동안 써왔던 파랑새 로고를 버리고 알파벳 X를 새 로고로 쓰기로 했습니다. 트위터를 인수한 일론 머스크가 밝힌 대로 금융과 쇼핑까지 담아 사업을 확장하겠다는 건데, 성과 날지 지 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136709 pubDate > 2023.07.25 title > 기습도발 효과?…북, '전승절' 앞두고 심야 미사일 발사 description > [앵커]북한이 어젯밤 자정 무렵 단거리 탄도미사일을 발사했습니다. 그제는 새벽에 쏘더니 이번엔 심야를 노린 겁니다. 북한이 '전승절'이라고 부르는 정전협정 체결일을 앞두고 다양한 시간대를 이용해 기습 도발 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136716 pubDate > 2023.07.25 title > [단독] '안전등급 A' 받았는데도…서울여대 도서관 외벽 무너져 description > [앵커]서울 노원구의 서울여대에서 지난주 쏟아진 비로 도서관 외벽이 무너지고 기둥에 금이 가는 일이 벌어졌습니다. 저희가 확인해 보니, 올해 안전진단에서 가장 높은 등급을 받았는데도 이런 사고가 났습니다. link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136711 pubDate > 2023.07.25 title > [밀착카메라] 수해지역 누비는 커피 트럭…"더운 날 오아시스 같아" description > [앵커]퍼부은 비로 큰 피해를 입은 이재민들에게 오아시스 같은 존재가 있습니다. 바로 시원한 커피와 음료를 아무런 대가 없이 나눠주는 '커피 트럭'입니다.40여년 전 비슷한 피해를 입었던 한 목사가 트럭을 몰고 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136713 pubDate > 2023.07.25 title > [인터뷰] 택배기사 부부 "아직 세상에 희망은 있구나 느껴" description > ■ 인용보도 시 프로그램명 'JTBC 뉴스룸'을 밝혀주시기 바랍니다. 인터뷰의 저작권은 JTBC에 있습니다.■ 방송 : JTBC 뉴스룸 / 진행 : 한민용[앵커]주민들의 따뜻한 마음에 화답하듯 건강한 모습으로 다시 일터로 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136714 pubDate > 2023.07.25 title > '2차전지'만 붙으면 주가 폭등…"과열된 밈 주식" 우려도 description > [앵커]오늘(25일) 살펴볼 이슈는 주식입니다. 주식 조금이라도 관심 있으면, '에코프로'란 회사 다 알 겁니다. 1년 전 10만원 하던 주가가 오늘은 129만원이 됐습니다. 13배 올랐습니다. 이 회사는 전기차에 쓰이는 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136717 pubDate > 2023.07.25 title > [단독] 쓰러진 아내 두고 테니스 치러 간 남편…집안 곳곳엔 '핏자국' description > [앵커]오늘(25일) 탐사보도 트리거는 가정폭력 문제를 집중 취재했습니다. 두 달 전 인천 강화도에서 가정폭력으로 의심되는 사건이 벌어졌습니다. 아내가 피를 흘린 채 바닥에 쓰러졌는데 남편은 아무 조치도 하지 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136721 pubDate > 2023.07.25 */ */
더보기※ 내 풀이
/*================================================== XmlDomTest07.java - 콘솔 기반 자바 프로그램 - XML DOM 활용 → 원격(remote) XML 읽어내기 ※ jtbc로부터 뉴스 속보 데이터 수신 https://fs.jtbc.co.kr/RSS/newsflash.xml ===================================================*/ /* title> JTBC News link> https://fs.jtbc.co.kr/RSS/newsflash.xml description> 속보 RSS copyright> Copyright(C) JTBC All rights reserved. 주요기사 -------------------------------------------- title> 강아지 잃어버려놓고…영업 방해로 고소한다는 애견호텔|신유진 변호사 [상클 상담소] description> ■ 인용보도 시 프로그램명 'JTBC 상암동 클라스'를 밝혀주시.... link> https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136591 pubDate> 2023.07.25 title> '짠당포' 김태원X임형준X박영진, 짠내 배틀 1인자는 누구? description> 연예계 짠내 아이콘 3인방 김태원, 임형준, 박영진이 '짠당포'에 출연한... link> https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136627 pubDate> 2023.07.25 : */ package com.test.xml; 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 XmlDomTest07 { public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document xmlObj = null; String url = "https://fs.jtbc.co.kr/RSS/newsflash.xml"; xmlObj = builder.parse(url); Element root = xmlObj.getDocumentElement(); System.out.printf("title > %s%n" , ((Element)root.getElementsByTagName("title").item(0)).getTextContent()); System.out.printf("link > %s%n" , ((Element)root.getElementsByTagName("link").item(0)).getTextContent()); System.out.printf("description > %s%n" , ((Element)root.getElementsByTagName("description").item(0)).getTextContent()); System.out.printf("copyright > %s%n" , ((Element)root.getElementsByTagName("copyright").item(0)).getTextContent()); System.out.println(); System.out.println("주요 기사 ------------------------------------------"); NodeList itemNodeList = root.getElementsByTagName("item"); for (int i=0; i<itemNodeList.getLength(); i++) { Element itemElement = (Element)(itemNodeList.item(i)); System.out.printf("title > %s%n" ,XMLDOM.getText(itemElement, "title")); System.out.printf("description > %s%n" ,XMLDOM.getText(itemElement, "description")); System.out.printf("link > %s%n" ,XMLDOM.getText(itemElement, "link")); System.out.printf("pubDate > %s%n" ,XMLDOM.getText(itemElement, "pubDate")); System.out.println(); } } catch (Exception e) { System.out.println(e.toString()); } } } // 실행 결과 /* title > JTBC News link > https://fs.jtbc.co.kr/RSS/newsflash.xml description > 속보 RSS copyright > Copyright(C) JTBC All rights reserved. 주요 기사 ------------------------------------------ title > 강아지 잃어버려놓고…영업 방해로 고소한다는 애견호텔|신유진 변호사 [상클 상담소] description > ■ 인용보도 시 프로그램명 'JTBC 상암동 클라스'를 밝혀주시기 바랍니다. 저작권은 JTBC에 있습니다.■ 방송 : JTBC 상암동 클라스 / 진행 : 이가혁·김하은[앵커]'상클 라이프' 시작합니다. 매주 화요일은 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136591 pubDate > 2023.07.25 title > '짠당포' 김태원X임형준X박영진, 짠내 배틀 1인자는 누구? description > 연예계 짠내 아이콘 3인방 김태원, 임형준, 박영진이 '짠당포'에 출연한다.오늘(25일 화요일) 밤 10시 10분에 방송되는 JTBC '짠당포'에는 김태원, 임형준, 박영진이 출연해 우열을 가리기 힘든 짠내 배틀을 벌이며 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136627 pubDate > 2023.07.25 title > '힙하게' 한지민X이민기X수호, 허당 히어로들의 코믹 폭격 description > '힙하게' 한지민, 이민기, 수호가 범죄 잡고 웃음도 잡는다. 오는 8월 12일 첫 방송되는 JTBC 새 토일드라마 '힙하게'(연출 김석윤·최보윤, 극본 이남규·오보현·김다희, 제작 스튜디오 피닉스& link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136626 pubDate > 2023.07.25 title > 침수 차량 관리 어떻게?…중고차 구매 시 유의할 점|박병일 자동차 정비 명장 [머니 클라스] description > ■ 인용보도 시 프로그램명 'JTBC 상암동 클라스'를 밝혀주시기 바랍니다. 저작권은 JTBC에 있습니다.■ 방송 : JTBC 상암동 클라스 / 진행 : 이가혁[앵커]저 같은 경알못, 경제를 잘 알지 못하는 사람을 위한 당장 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136598 pubDate > 2023.07.25 title > 수컷 고릴라가 출산을?…사육사도 깜짝 놀란 이유가 description > 고릴라 출산 지금 보시는 건 서부로랜드 고릴라입니다.밀렵과 서식지 파괴로 해마다 야생 개체수가 줄고 있는 멸종위기종인데요.최근 귀한 아기 고릴라가 탄생했는데, 사람들이 말도 안 된다며 깜짝 놀랐다고 합니 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136592 pubDate > 2023.07.25 title > 20층 높이서 멈춘 놀이기구…탑승객들 '공포의 30분' description > 놀이기구 사고 이번엔 호주 퀸즐랜드의 지역 축제 현장으로 가보겠습니다.지역 축제하면 빼놓을 수 없는 게 바로 놀이기군데요.그런데 아까부터 꼼짝도 하지 않는 게 뭔가 이상합니다.사실 지금 사고가 난 건데요. link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136595 pubDate > 2023.07.25 title > 불꽃놀이 대신…드론 800여 대 띄워 '여름밤의 낭만' description > 여름철 축제 현장이나 휴가철 바닷가를 가면 불꽃놀이 많이 볼 수 있죠?그런데 요즘은 이게 더 대세라고 합니다.신호에 맞춰 일제히 밤하늘로 날아오르는 무인항공기 드론들.마치 반딧불이처럼 형형색색의 불빛을 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136596 pubDate > 2023.07.25 title > 짧은 생애주기 마치고 자취 감춘 러브버그…모기 기승 description > < 자취 감춘 러브버그 >러브버그라고 불리는 붉은등우단털파리 한 번쯤은 보셨을 텐데요.성충이 된 후에는 암수가 함께 붙어다니기 때문에 '러브버그'라고 알려져 있습니다.지난달 기승을 부리던 이 '러브버그'가 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136600 pubDate > 2023.07.25 title > 히잡 안 쓴 여배우 포스터에…이란 정부 "영화제 중단" description > < '히잡' 미착용에 영화제 중단 >히잡, 이슬람 여성들이 머리와 상반신을 가리기 위해 쓰는 두건의 일종이죠.특히 이란에서는 만 9세부터 여성은 히잡법에 따라 공공장소에서 히잡을 착용해야 하는데요. 위반할 경 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136602 pubDate > 2023.07.25 title > "앞좌석 차지 마세요" 요청했더니…맨발 올린 민폐남 description > < '내집처럼' 영화관 맨발 민폐남 >[기자]맨발로 영화를 보러 온 건가? 싶으실 텐데, 이를 뛰어넘는 민폐남이 있다고 해 누리꾼들의 공분을 사고 있습니다.사진을 함께 보시면, 영화관 좌석 등받이 위로 두 발이 빼 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136603 pubDate > 2023.07.25 title > '이런 게 진짜 명품아파트'…쓰러진 택배기사 울린 주민들 description > < 쓰러진 택배기사 울린 주민들 >[앵커]혹시 최근에 있었던 아파트 택배 대란이나 택배 갑질 같은 씁쓸한 사연일까요?[기자]이번에는 다행히도 마음 따뜻해지는 사연입니다.최근 배송업무 중 쓰러진 택배기사를 위 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136604 pubDate > 2023.07.25 title > '나가기 무섭다' 호신용품 불티…2030 남성 구매자 늘어 description > < "나가기 무섭다"' 호신용품 불티 >[기자]앞서 도시락있슈에서도 전해드린 신림동 흉기난동 사건이 누리꾼들 사이에서도 연일 화제가 되고 있습니다.대낮에 길거리에서 발생한 사건인 만큼 시민들의 불안감 또한 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136605 pubDate > 2023.07.25 title > "1년 뛰면 1조원"…사우디 알힐랄, 음바페에 거액 제시 description > < 1년 알바에 1조 챙겨가 >[기자]이강인 선수가 소속돼 있어 친숙한 팀이죠, 파리 생제르맹의 공격수 킬리안 음바페 얘기 가지고 왔습니다.사우디아라비아 프로축구 알힐랄이 음바페 영입을 위해 천문학적인 금액을 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136609 pubDate > 2023.07.25 title > "보호자 악성 민원에 회의감…소아과 문 닫습니다" description > < 소아과 문 닫겠습니다 >[기자]먼저 사진 한장 보시죠. 임현택 대한소아청소년과의사회 회장이 자신의 페이스북에 사진을 올렸는데요, 의원 문닫겠습니다. 라는 제목으로 시작합니다. 14세 미만은 보호자를 동반해 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136611 pubDate > 2023.07.25 title > 신림동 흉기살해범에 "칼 버리세요"…경찰 존댓말 논란 description > < 13년 전에도 무차별 폭행 >[기자]서울 신림동에서 무차별 흉기를 휘두른 조 모씨가 과거에도 처음 보는 사람에게 소주병을 내리쳐 다치게 했던 것으로 드러났습니다. 지난 21일, 1명을 살해하고, 3명을 다치게 한 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136612 pubDate > 2023.07.25 title > '오송 참사' 관련 무더기 수사의뢰…'임시 제방' 부실 초점 description > < 무더기 수사의뢰 >[기자]'오송 지하차도 참사'와 관련해, 검찰이 충북도청과 도경찰청 등 정부기관 10 여곳을 전격 압수수색했습니다. 오송 지하차도 참사와 관련 있는 기관 대부분이 포함됐는데요, 하천 관리와 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136613 pubDate > 2023.07.25 title > 7월 24일 (월) 뉴스룸 다시보기 description > 14명이 희생된 오송 지하차도 참사의 책임을 가리는 작업이 본격적으로 시작됐습니다. 검찰은 오늘(24일), 충청북도 도청과 도경찰청 등 정부기관 10여 곳을 대대적으로 압수수색했습니다. 국무조정실도 "중대한 직 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136547 pubDate > 2023.07.24 title > "중대 직무유기"…국조실, 충북도·행복청 12명 수사의뢰 description > [앵커]국무조정실은 충북도와 행복청에도 '직무유기 혐의'가 있다며 12명을 무더기로 수사의뢰했습니다. 제방이 무너지고 물 찬 도로에 차들이 진입할 때까지 별다른 조치를 취하지 않은 점, 또 참사의 직접적 원인 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136543 pubDate > 2023.07.24 title > 김민재에 환호한 4만 5천명…'손흥민 단짝' 케인도 뮌헨행? description > [민재 김! 뮌헨에 온 걸 환영합니다.]4만 5천명 관중이 환호합니다.김민재가 입단 뒤 처음으로 만난 홈팬들인데요, 투헬 감독과 함께 훈련도 했습니다.[김민재/바이에른 뮌헨 : 놀라운 경기장, 놀라운 선수들. 좋네 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136513 pubDate > 2023.07.24 title > 레드카드 받고 '심판 뺨 때린' 감독…격분해 실신까지 description > < 난징 4:0 랴오닝 선양|중국 프로축구 2부 리그 (어제) >옐로카드에 거칠게 항의하다, 레드카드를 받자 심판의 뺨을 때립니다.폭력을 쓴 사람, 중국 2부리그 랴오닝 선양의 감독인데요, 얼마나 격분했는지 실랑이 link > https://news.jtbc.co.kr/article/article.aspx?news_id=NB12136512 pubDate > 2023.07.24 */
728x90'SsY > Class' 카테고리의 다른 글
[Kakao Map API] 활용 (0) 2023.07.27 [XML] 004. XML 관찰 실습(4)(JSP 기반) : XPath 개요 (0) 2023.07.27 [XML] 002. XML 관찰 실습(2) : 로컬 XML 파일 읽기 (0) 2023.07.25 [XML] 001. XML 개요 (0) 2023.07.21 [FileSystem] 02. 파일시스템 및 파일업로드(2) (0) 2023.07.20 - rss.xml