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루로 공을 던집니다.깔끔하게 아웃인가 싶었는데, 주자가 살았습니다.자세히 볼까요?이럴수가&hellip; 줄이 끊어지며, 공이 글러브
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 상암동 클라스 / 진행 : 이가혁&middot;김하은[앵커]'상클 라이프' 시작합니다. 매주 화요일은 
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 새 토일드라마 '힙하게'(연출 김석윤&middot;최보윤, 극본 이남규&middot;오보현&middot;김다희, 제작 스튜디오 피닉스&
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