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 ํ์ผ์ 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() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ๊ทธ ์ฌ์ด์ ์ฐ๋ฆฌ๊ฐ ํ์๋ก ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.