๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ๋ฐฐ์šฐ๊ณ  ์ตํžˆ๊ธฐ +/Spring

(109)[Spring]20์ผ์ฐจ: ((xml)) RSS, XmlApp05~07

by ์ข…์ด๋นจ๋Œ€ 2024. 2. 5.
TOP

๋ชฉ์ฐจ

    1. 2024.2.1(๊ธˆ)

     

    2. RSS๋ž€?

    RSS(Really Simple Syndication, Rich Site Summary)๋ž€ ๋ธ”๋กœ๊ทธ์ฒ˜๋Ÿผ ์ปจํ…์ธ  ์—…๋ฐ์ดํŠธ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚˜๋Š” ์›น์‚ฌ์ดํŠธ์—์„œ, ์—…๋ฐ์ดํŠธ๋œ ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ๋…์ž๋“ค์—๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด XML์„ ๊ธฐ์ดˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ ํ˜•์‹

    - ๊ธฐ์ƒ์ฒญ ๋‚ ์”จ๋ˆ„๋ฆฌ


    - ๊ธฐ์ƒ์ฒญ ๋‚ ์”จ๋ˆ„๋ฆฌ

    https://www.weather.go.kr/w/pop/rss-guide.do

    -JTBC

    https://news.jtbc.co.kr/Etc/RssService.aspx


     

    - rss: http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108 / -rss์„ค๋ช…:https://www.weather.go.kr/w/resources/pdf/midtermforecast_rss.pdf

     


    F_XmlApp05: RSS ๊ธฐ์ƒ์ฒญ ๋‚ ์”จ(๋กœ์ปฌ)

    ใ„ดrss.xml

    ...  ๊ธฐ์ƒ์ฒญ ๋‚ ์”จ๋ˆ„๋ฆฌ rss http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108 ...

    ใ„ด/XmlApp05/src/com/test

    ใ„ดใ„ดXMLDOM.java

    package com.test;
    
    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 ;
    	}
    }

    ใ„ดใ„ดXmlDomTest06.java

    /*================================================
    	XmlDomTest06.java
    	- ์ฝ˜์†” ๊ธฐ๋ฐ˜ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ
    	- XML DOM ํ™œ์šฉ → ๋กœ์ปฌ(local) XML ์ฝ์–ด๋‚ด๊ธฐ
    	  (rss.xml)
    	  โ€ป ๊ธฐ์ƒ์ฒญ ๋‚ ์”จ๋ˆ„๋ฆฌ๋กœ๋ถ€ํ„ฐ ์–ป์–ด๋‚ธ ๋ฐ์ดํ„ฐ
    ================================================*/
    package com.test;
    
    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 XmlDomTest06
    {
    	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"));
    			//--==>> ์ „๊ตญ ์œก์ƒ ์ค‘๊ธฐ์˜ˆ๋ณด - 2024๋…„ 02์›” 02์ผ (๊ธˆ)์š”์ผ 06:00 ๋ฐœํ‘œ
    			
    			
    			// 3-2. ๊ธฐ์ƒ์ „๋ง ์ถ”์ถœํ•˜๊ธฐ(wf)
    			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. ๋„์‹œ๋ณ„ ๊ธฐ์ƒ ์˜ˆ๋ณด ์ถ”์ถœํ•˜๊ธฐ(location>city)
    			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;
    				
    				//<mode>A02</mode>				
    				//<tmEf>2024-02-05 00:00</tmEf>	// ๋‚ ์งœ ์‹œ๊ฐ„
    				//<wf>ํ๋ฆฌ๊ณ  ๋น„/๋ˆˆ</wf>			// ๋‚ ์”จ ์˜ˆ๋ณด
    				//<tmn>2</tmn>					// ์ตœ์ € ์˜จ๋„
    				//<tmx>3</tmx>					// ์ตœ๊ณ  ์˜จ๋„
    				//<reliability />
    				//<rnSt>70</rnSt>				// ๊ฐ•์ˆ˜ ํ™•๋ฅ 
    				
    				System.out.printf("๋„์‹œ: %s%n", XMLDOM.getText(locationElement, "city"));
    				
    				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°C ~ %s°C / %s%%\n"	//** %%: % ๋ฅผ ์ฐ์–ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ %%๋‘๊ฐœ ์ž‘์„ฑ
    							, XMLDOM.getText(dataElement, "tmEf")
    							, XMLDOM.getText(dataElement, "wf")
    							, XMLDOM.getText(dataElement, "tmn")
    							, XMLDOM.getText(dataElement, "tmx")
    							, XMLDOM.getText(dataElement, "rnSt")
    							);
    //					System.out.printf("๋‚ ์งœ ์‹œ๊ฐ„: %s%n", XMLDOM.getText(dataElement, "tmEf"));
    //					System.out.printf("๋‚ ์”จ ์˜ˆ๋ณด: %s%n", XMLDOM.getText(dataElement, "wf"));
    //					System.out.printf("์ตœ๊ณ  ์˜จ๋„: %s%n", XMLDOM.getText(dataElement, "tmn"));
    //					System.out.printf("์ตœ์ € ์˜จ๋„: %s%n", XMLDOM.getText(dataElement, "tmx"));
    //					System.out.printf("๊ฐ•์ˆ˜ ํ™•๋ฅ : %s%n", XMLDOM.getText(dataElement, "rnSt"));
    				}
    				System.out.println("-------------------------------------------------------");
    				
    			}
    			
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		
    	}
    }

    F_XmlApp06: ๊ธฐ์ƒ์ฒญ ๋‚ ์”จ(์›๊ฒฉ)

    ใ„ด/XmlApp06/src/com/test

    ใ„ดใ„ดXMLDOM.java

    ... XmlApp05  ์ฐธ์กฐ ...

    ใ„ดใ„ดXmlDomTest07.java

    /*================================================
    	XmlDomTest07.java
    	- ์ฝ˜์†” ๊ธฐ๋ฐ˜ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ
    	- XML DOM ํ™œ์šฉ →  ์›๊ฒฉ(local) XML ์ฝ์–ด๋‚ด๊ธฐ
    	  (http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108)
    	  โ€ป ๊ธฐ์ƒ์ฒญ ๋‚ ์”จ๋ˆ„๋ฆฌ๋กœ๋ถ€ํ„ฐ ์–ป์–ด๋‚ธ ๋ฐ์ดํ„ฐ
    ================================================*/
    /*
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108 ์ „๊ตญ
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109 ์„œ์šธ·๊ฒฝ๊ธฐ๋„
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=105 ๊ฐ•์›๋„
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=131 ์ถฉ์ฒญ๋ถ๋„
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=133 ์ถฉ์ฒญ๋‚จ๋„
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=146 ์ „๋ผ๋ถ๋„
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=156 ์ „๋ผ๋‚จ๋„
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=143 ๊ฒฝ์ƒ๋ถ๋„
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=159 ๊ฒฝ์ƒ๋‚จ๋„
    http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=184 ์ œ์ฃผํŠน๋ณ„์ž์น˜๋„
    */
    
    package com.test;
    
    import java.io.InputStream;
    import java.net.URL;
    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;
    
    import com.oracle.webservices.internal.api.databinding.Databinding.Builder;
    
    public class XmlDomTest07
    {
    	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 factory = DocumentBuilderFactory.newInstance();
    				DocumentBuilder builder = factory.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;
    				
    				//System.out.println("๊ณ„์† ์ง„ํ–‰");
    				
    				String str = String.format("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=%s"
    						, stnId[Integer.parseInt(m)-1]);	//*** -1: ์ธ๋ฑ์Šค๋Š” 0 ๋ถ€ํ„ฐ์—ฌ์„œ
    				// ํ™•์ธ
    				//System.out.println("์š”์ฒญ ์ฃผ์†Œ: "+str);
    				// ใ€Ž3. ๊ฐ•์›๋„ใ€ ์„ ํƒ ์‹œ
    				// ์š”์ฒญ ์ฃผ์†Œ: http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=105
    				// ใ€Ž7. ์ „๋ผ๋‚จ๋„ใ€ ์„ ํƒ ์‹œ
    				// ์š”์ฒญ ์ฃผ์†Œ: http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=156
    				
    				// ๋ฌธ์ž์—ด๋กœ ๊ตฌ์„ฑํ•œ ์š”์ฒญ ์ฃผ์†Œ๋ฅผ URL ๊ฐ์ฒด ๊ตฌ์„ฑ → ์ ˆ๋Œ€๊ฒฝ๋กœ ์ง€์ •๋ฐฉ์‹
    				URL url = new URL(str);
    				//*** ๊ทธ๋ƒฅ ๋ฌธ์ž์—ด์ด๋ฉด 
    				// ํ•ด๋‹น ์ฃผ์†Œ์˜ ๋‚ด์šฉ์„ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฝ์–ด์˜ค๋„๋ก
    				
    				// ๊ตฌ์„ฑํ•œ URL๋กœ ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋‚ด์šฉ ์ฝ์–ด์˜ค๊ธฐ → ์ŠคํŠธ๋ฆผ(stream)
    				InputSource is =  new InputSource(url.openStream());
    				
    				xmlObj = builder.parse(is);
    				
    				//-------------------------------------
    				// ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ ์ ‘๊ทผ
    				Element root = xmlObj.getDocumentElement();
    				
    				// ํƒ€์ดํ‹€ ์ถ”์ถœํ•˜๊ธฐ
    				Node itemNode = root.getElementsByTagName("item").item(0);
    				Element itemElement = (Element)itemNode;
    				System.out.printf("%s%n%n", XMLDOM.getText(itemElement, "title"));
    				
    				// ๊ธฐ์ƒ์ „๋ง ์ถ”์ถœํ•˜๊ธฐ(wf)
    				System.out.println("[๊ธฐ์ƒ ์ „๋ง]----------------------------------\n");
    				Node wfNode = root.getElementsByTagName("wf").item(0);
    				Element wfElement = (Element)wfNode;
    				System.out.printf("%s\n", wfElement.getTextContent().replaceAll("<br />", "\n"));
    				
    				// ๋„์‹œ๋ณ„ ๊ธฐ์ƒ ์˜ˆ๋ณด ์ถ”์ถœํ•˜๊ธฐ(location>city)
    				System.out.println("[์œก์ƒ ๋‚ ์”จ]----------------------------------\n");
    				NodeList loactionNodeList = root.getElementsByTagName("location");
    				for (int i = 0; i < loactionNodeList.getLength(); i++)
    				{
    					Node locationNode = loactionNodeList.item(i);
    					Element locationElement = (Element)locationNode;
    					
    					// ๋„์‹œ ...
    					// ๋‚ ์งœ ์‹œ๊ฐ„(tmEf) / ๋‚ ์”จ ์˜ˆ๋ณด(wf) / ์ตœ์ € ์˜จ๋„(tmn) ~ ์ตœ๊ณ ์˜จ๋„(tmx) / ๊ฐ•์ˆ˜ํ™•๋ฅ (rnSt)
    					System.out.printf("%s)--------------%n", XMLDOM.getText(locationElement, "city"));
    					
    					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("\n\n");
    				
    				
    			} catch (Exception e)
    			{
    				System.out.println(e.toString());
    			}
    		} while (true);
    		
    		
    		
    	}
    }

     


    F_XmlApp07: ์–ธ๋ก ์‚ฌ ๋‰ด์Šค(์›๊ฒฉ)

    ใ„ด/XmlApp07/src/com/test

    ใ„ดใ„ดXMLDOM.java

    ... XmlApp05  ์ฐธ์กฐ ...

    ใ„ดใ„ดXmlDomTest08.java

    /*================================================
    	XmlDomTest08.java
    	- ์ฝ˜์†” ๊ธฐ๋ฐ˜ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ
    	- XML DOM ํ™œ์šฉ →  ์›๊ฒฉ(local) XML ์ฝ์–ด๋‚ด๊ธฐ
    	  (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> ์˜ค๋Š˜(2์ผ)์€ ์ „๊ตญ์ด ๋Œ€์ฒด๋กœ ํ๋ฆฐ ๊ฐ€์šด๋ฐ, ์ผ๋ถ€ ์ง€์—ญ์˜ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ '๋‚˜์จ' ์ˆ˜์ค€์„ ๋ณด์ด๊ฒ ์Šต๋‹ˆ๋‹ค.๋‚ฎ ์ตœ๊ณ ๊ธฐ์˜จ์€ 3๋„์—์„œ 10๋„๋กœ ํฌ๊ทผํ•œ ๋‚ ์”จ๊ฐ€ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
    link> https://news.jtbc.co.kr/article/article.aspx?news_id=NB12163616
    
    title> ์™ธ์‹๋น„ ๊ธ‰๋“ฑ์— ์ธ๊ธฐ '์‘ฅ'…๋ƒ‰๋™์น˜ํ‚จ '์˜์–‘์„ฑ๋ถ„' ๊ผญ ํ™•์ธํ•˜์„ธ์š”
    link> https://news.jtbc.co.kr/article/article.aspx?news_id=NB12163595
    description> [์•ต์ปค]ํ”„๋žœ์ฐจ์ด์ฆˆ ์น˜ํ‚จ๊ฐ’์ด 2๋งŒ ์›์„ ํ›Œ์ฉ ๋„˜๋Š” ์š”์ฆ˜, ๋Œ€์ฒดํ’ˆ์œผ๋กœ ๋งˆํŠธ์˜ ๋ƒ‰๋™ ์น˜ํ‚จ์„ ์ฐพ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Š˜์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ž˜ ์‚ดํŽด๋ณด์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ๊ธฐ ์ œํ’ˆ๋“ค ๊ฐ€์šด๋ฐ ํฌํ™”์ง€๋ฐฉ๊ณผ ๋‚˜ํŠธ๋ฅจ์ด ๊ณผํ•˜๊ฒŒ ๋“ค์–ด ์žˆ๊ฑฐ๋‚˜, ์›์‚ฐ
    */
    package com.test;
    
    import java.net.URL;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    
    import jdk.internal.org.xml.sax.InputSource;
    
    public class XmlDomTest08
    {
    	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) ์ธํ„ฐํŽ˜์ด์Šค
    			   	- Node
    			   	  : ๋ชจ๋“  ๊ฐ์ฒด์˜ ๋ถ€๋ชจ ์ธํ„ฐํŽ˜์ด์Šค๋กœ์„œ ๊ณตํ†ต์ ์œผ๋กœ ๊ธฐ๋Šฅํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง„๋‹ค.
    			   	- NodeList (NODESET)
    			   	  : ๋…ธ๋“œ๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‰ฝ๋„๋ก(์ผ๊ด„ ์ฒ˜๋ฆฌ) ํ•œ ๊ฒƒ
    			   	- Document
    			   	  : DOM(Doucment Object Model) ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ตœ์ƒ์œ„ ๋…ธ๋“œ๋กœ XML ๋ฌธ์„œ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    			   	- Element
    			   	  : XML ์˜ ์—˜๋ฆฌ๋จผํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด ์œ ํ˜•
    			   	- Attr
    			   	  : XML ์˜ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด ์œ ํ˜•
    			   	- CharacterData
    			   	  : XML ์˜ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด ์œ ํ˜•
    			   	- Text
    			   	  : ๋ฌธ์ž ๋ฐ์ดํ„ฐ(๋‚ด์šฉ)์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด ์œ ํ˜•
    			   	  
    			 */
    			
    			// 1.
    			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(str);
    			
    			// ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ ์ ‘๊ทผ
    			// 2. 
    			Element root = xmlObj.getDocumentElement();
    			
    			//ํ™•์ธ
    			//System.out.println(root.getNodeName());
    			//--==>> rss
    			
    			// 3.
    			Node channelNode = root.getElementsByTagName("channel").item(0);
    			Element channelElement = (Element)channelNode;
    			
    			Node descriptionNode = root.getElementsByTagName("description").item(0);
    			Element descriptionElement = (Element)descriptionNode;
    //			title> JTBC news
    //			link> https://fs.jtbc.co.kr/RSS/newsflash.xml
    //			description> ์†๋ณด RSS
    //			copyright> Copyright(C) JTBC All rights reserved.
    			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", descriptionElement.getTextContent());
    			System.out.printf("copyright> %s\n\n", XMLDOM.getText(channelElement, "copyright"));
    			
    			// 4.
    			NodeList itemNodeList = channelElement.getElementsByTagName("item");
    			for (int i = 0; i < itemNodeList.getLength(); i++)
    			{
    				Node itemNode = itemNodeList.item(i);
    				Element itemElement = (Element)itemNode;
    				
    //				์ฃผ์š” ๊ธฐ์‚ฌ ------------------------------------------------
    //				title> [๋‚ ์”จ] ์ „๊ตญ ๋Œ€์ฒด๋กœ ํ๋ฆผ…๊ณณ๊ณณ ๋ฏธ์„ธ๋จผ์ง€ '๋‚˜์จ'
    //				description> ์˜ค๋Š˜(2์ผ)์€ ์ „๊ตญ์ด ๋Œ€์ฒด๋กœ ํ๋ฆฐ ๊ฐ€์šด๋ฐ, ์ผ๋ถ€ ์ง€์—ญ์˜ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ '๋‚˜์จ' ์ˆ˜์ค€์„ ๋ณด์ด๊ฒ ์Šต๋‹ˆ๋‹ค.๋‚ฎ ์ตœ๊ณ ๊ธฐ์˜จ์€ 3๋„์—์„œ 10๋„๋กœ ํฌ๊ทผํ•œ ๋‚ ์”จ๊ฐ€ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
    //				link> https://news.jtbc.co.kr/article/article.aspx?news_id=NB12163616
    				System.out.println("  ์ฃผ์š” ๊ธฐ์‚ฌ ----------------------------------------------------");
    				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"));
    
    			}
    			
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		
    	}
    }