๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Programming/Java

[Java] XMLํŒŒ์ผ๊ณผ ์ž๋ฐ”(Java)๋กœ ํŒŒ์‹ฑ(parsing)ํ•˜๊ธฐ

728x90
๋ฐ˜์‘ํ˜•

xml์˜ˆ์‹œ ํŒŒ์ผ

<?xml version="1.0" encoding="UTF-8"?>
<sample>
	<customer>
		<name>ํ•œ๊ตญ์ด</name>
		<age>25</age>
		<address>์„œ์šธ</address>
	</customer>
</sample>

java๋กœ xmlํŒŒ์ผ parsing ํ•˜๊ธฐ

XML ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ ˆ์ฐจ๋Š” HTML ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ ˆ์ฐจ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

HTML์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•„์š”ํ•œ ํƒœ๊ทธ๋ฅผ ์ธ์‹ํ•ด์ค„ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, document.getElementById("๊ฐ€์ ธ์˜ฌ ํƒœ๊ทธ์˜ Id") ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ํŠน์ • ์•„์ด๋””๋ฅผ ๊ฐ€์ง„ ํƒœ๊ทธ๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ฒ˜๋Ÿผ xmlํŒŒ์ผ ์—ญ์‹œ ํƒœ๊ทธ๋ฅผ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ์ ˆ์ฐจ๋Š” ๋ฌธ์„œ์˜ ์ž์ฒด ๊ฐ์ฒด์ธ document๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;

// xml ํŒŒ์‹ฑ ๋นŒ๋“œ์—…
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

// xml ํŒŒ์ผ์„ document๋กœ ํŒŒ์‹ฑํ•˜๊ธฐ
Document document = builder.parse("xml/sample.xml");

xml ํŒŒ์ผ์˜ ์œ„์น˜๋Š” ์›ํ•˜๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ ํ˜น์€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

xml ํŒŒ์ผ ์œ„์น˜ ์˜ˆ์‹œ

์ด์ œ ์ž๋ฐ”๊ฐ€ xml ํŒŒ์ผ์˜ document๋ฅผ ๊ฐ€์ง€๊ณ  ์™€์„œ ํƒœ๊ทธ๋“ค์„ ์ธ์‹ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํƒœ๊ทธ๋ผ๋Š” ๊ฒƒ์ด ๊ฒฐ๊ตญ document์•ˆ์— ์žˆ๋Š” ์š”์†Œ(element)์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด Element๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

getDocumentElement() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ์š”์†Œ(root ์š”์†Œ)๋ฅผ ๊ฐ€์ ธ ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

// root ์š”์†Œ ๊ฐ€์ ธ์˜ค๊ธฐ
Element root = document.getDocumentElement();
// root ์š”์†Œ ํ™•์ธ : ์ฒซ ํƒœ๊ทธ sample
System.out.println(root.getNodeName()); 
// root ์š”์†Œ์˜ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋Š” #Text
Node firstNode = root.getFirstChild();
// ๋‹ค์Œ ๋…ธ๋“œ๋Š” customer
Node customer = firstNode.getNextSibling();
// customer ์š”์†Œ ์•ˆ์˜ ๋…ธ๋“œ ๋ฆฌ์ŠคํŠธ
NodeList childList = customer.getChildNodes();

root์š”์†Œ๊ฐ€ <sample> ํƒœ๊ทธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ๋ฒˆ์งธ Element์ธ root๋ฅผ ๊ฐ€์ ธ์™€์„œ getNodeName() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฆฌํ„ด๋œ ๋ฌธ์ž์—ด(String)์„ ์ถœ๋ ฅํ•˜๋ฉด "sample"์ด๋ผ๋Š” ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

getFirstChilde() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์š”์†Œ์˜ ์ฒซ ๋ฒˆ์งธ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋•Œ, root๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ๋œ <sample> ํƒœ๊ทธ์˜ ์ฒซ ๋ฒˆ์งธ node๊ฐ€ <customer> ํƒœ๊ทธ๊ฐ€ ์•„๋‹Œ #Test๋กœ ํ‘œ์‹œ๋˜๋Š”๋ฐ ์ด๋Š” xmlํŒŒ์ผ์˜ ๋นˆ ๊ณต๋ฐฑ์„ ๋…ธ๋“œ๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

ํƒœ๊ทธ์™€ ํƒœ๊ทธ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์„ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๋ฐฑ์˜ ๊ธธ์ด์— ์ƒ๊ด€์—†์ด ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

getNextSibiling() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ณ„์†ํ•ด์„œ ํ•ด๋‹น ์š”์†Œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ฒซ ๊ณต๋ฐฑ ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋…ธ๋“œ์ธ <customer> ํƒœ๊ทธ ๋…ธ๋“œ์— ์˜ค๊ฒŒ ๋˜๋ฉด getChildeNodes() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ <customer> ํƒœ๊ทธ ์•ˆ์˜ ๋…ธ๋“œ๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฆฌํ„ด ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ œ customer ํƒœ๊ทธ ์•ˆ์— ์žˆ๋Š” ํƒœ๊ทธ๋“ค์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for(int i = 0; i < childList.getLength(); i++) {
	Node item = childList.item(i);
	if(item.getNodeType() == Node.ELEMENT_NODE) { // ๋…ธ๋“œ์˜ ํƒ€์ž…์ด Element์ผ ๊ฒฝ์šฐ(๊ณต๋ฐฑ์ด ์•„๋‹Œ ๊ฒฝ์šฐ)
		System.out.println(item.getNodeName());
		System.out.println(item.getTextContent());
	} else {
		System.out.println("๊ณต๋ฐฑ ์ž…๋‹ˆ๋‹ค.");
	}
}

--์ถœ๋ ฅ ๊ฒฐ๊ณผ--

๊ณต๋ฐฑ์ž…๋‹ˆ๋‹ค.
name
ํ•œ๊ตญ์ด
๊ณต๋ฐฑ ์ž…๋‹ˆ๋‹ค.
age
25
๊ณต๋ฐฑ ์ž…๋‹ˆ๋‹ค.
address
์„œ์šธ
๊ณต๋ฐฑ ์ž…๋‹ˆ๋‹ค.


๊ฐ€์ ธ์˜จ ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฆฌ์ŠคํŠธ์—์„œ. item(index) ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ๊ฐ์˜ ์š”์†Œ๋“ค์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์œ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋Š” ๊ณต๋ฐฑ์„ ์š”์†Œ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ํƒœ๊ทธ, ๊ณต๋ฐฑ์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ œ getTextContext() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํƒœ๊ทธ ์‚ฌ์ด์˜ ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•