SsY/Class
[XML] 003. XML 관찰 실습(3) : 원격지 XML 파일 읽기 (콘솔 기반)
planet-si
2023. 7. 25. 11:20
728x90
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