JavaScript È°¿ëÆÁ
2018.09.30 / 22:44

¼­¹ö¿Í Åë½ÅÇϱâ(¿äû/ÀÀ´ä ó¸®

GAScripter
Ãßõ ¼ö 161

3.2 responseXML ¼Ó¼ºÀ» ÀÌ¿ëÇÑ DOM ½ÃÀÛÇϱâ
Áö±Ý±îÁöÀÇ ¿¹Á¦¿¡¼­´Â °£´ÜÇÏ°í ´Ü¼øÇÑ ¹®ÀÚ¿­À» ó¸®Çϴµ¥ ÀûÇÕÇÑ XHR °´Ã¼ÀÇ resonseText ¼Ó¼º¸¸À»
»ìÆ캸¾Ò´Ù. ÇÏÁö¸¸ ´ë´ÜÈ÷ º¹ÀâÇÑ ÀÀ´äµ¥ÀÌÅÍÀÇ °æ¿ì´Â ´Ü¼øÇÑ ¹®ÀÚ¿­·Î ó¸®ÇÒ ¼ö ¾øÀ¸¸ç XML Çü½ÄÀ¸·Î
ó¸®ÇÏ´Â °ÍÀÌ ÈξÀ ³í¸®ÀûÀÌ°í È¿À²ÀûÀÏ °ÍÀÌ´Ù. ±×·¯¸é ¾î¶»°Ô ºê¶ó¿ìÀú´Â ¼­¹ö·ÎºÎÅÍ ¹ÞÀº XML Çü½ÄÀÇ
µ¥ÀÌÅ͸¦ ó¸®ÇÒ ¼ö ÀÖ´Â °ÍÀϱî? XML ¹®¼­´Â W3C ÀÇ DOM À» ÀÌ¿ëÇؼ­ 󸮵ȴÙ. DOM À» Áö¿øÇÏ´Â
ºê¶ó¿ìÀúµéÀº ´ç¿¬È÷ XML ¹®¼­¸¦ ´Ù·ç´Â ¸¹Àº API ¸¦ ±¸ÇöÇÏ°í Àֱ⠶§¹®ÀÌ´Ù.
DOM Àº HTML °ú XML À» ´Ù·ç´Â API ¸¦ Á¦°øÇÏ°í ÀÖÀ¸¸ç, ½ºÅ©¸³Æ®¸¦ ÅëÇؼ­ ´ÙÅ¥¸ÕÆ®¿¡ Á¢±ÙÇÒ ¼ö
ÀÖµµ·Ï Á¤ÀǵǾî ÀÖ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®´Â DOM ¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°í DOM À» ´Ù·ê¼ö ÀÖ´Â ½ºÅ©¸³Æà ¾ð¾îÀÌ´Ù.
´ÙÅ¥¸ÕÆ®ÀÇ ¸ðµç ¿ä¼ÒµéÀº DOM ÀÇ ºÎºÐµéÀ̱⠶§¹®¿¡ ¿ä¼ÒÀÇ ¼Ó¼º°ú ¸Þ¼ÒµåµéÀº ÀÚ¹Ù½ºÅ©¸³Æ®·Î Á¦¾î°¡
°¡´ÉÇÏ´Ù.
´ÙÀ½Àº XML ¹®¼­¸¦ ó¸®Çϱâ À§ÇÑ DOM ¿ä¼ÒÀÇ ¼Ó¼ºÀ» »ìÆ캸µµ·Ï ÇÏÀÚ.
childNodes : ÇöÀç ¿ä¼ÒÀÇ ÀÚ½ÄÀ» ¹è¿­·Î Ç¥ÇöÇÑ´Ù.
firstChild : ÇöÀç ¿ä¼ÒÀÇ Ã¹¹ø° ÀÚ½ÄÀÌ´Ù.
lastChild : ÇöÀç ¿ä¼ÒÀÇ ¸¶Áö¸· ÀÚ½ÄÀÌ´Ù.
nextSibling : ÇöÀç ¿ä¼Ò¿Í ¹Ù·Î ´ÙÀ½ÀÇ ¿ä¼Ò¸¦ ÀǹÌÇÑ´Ù.
nodeValue : ÇØ´ç ¿ä¼ÒÀÇ °ªÀ» ÀÐ°í ¾µ ¼ö ÀÖ´Â ¼Ó¼ºÀ» Á¤ÀÇÇÑ´Ù.(=data)
parentNode : ÇØ´ç ¿ä¼ÒÀÇ ºÎ¸ð³ëµåÀÌ´Ù.
previousSibling : ÇöÀç ¿ä¼Ò¿Í ¹Ù·Î ÀÌÀüÀÇ ¿ä¼Ò¸¦ ÀǹÌÇÑ´Ù.
´ÙÀ½Àº XML ´ÙÅ¥¸ÕÆ®¸¦ ´Ù·ç´Â À¯¿ëÇÑ DOM ¿ä¼ÒÀÇ ¸Þ¼Òµå¸¦ »ìÆ캸ÀÚ.
getElementById(id) : ´ÙÅ¥¸ÕÆ®¿¡¼­ ƯÁ¤ÇÑ id ¼Ó¼º°ªÀ» °¡Áö°í ÀÖ´Â ¿ä¼Ò¸¦ ¹ÝȯÇÑ´Ù.
getElementsByTagName(name) : ƯÁ¤ÇÑ ÅÂ±× À̸§À» °¡Áö°í ÀÖ´Â ÀÚ½Ä ¿ä¼Ò·Î ±¸¼ºµÈ ¹è¿­À» ¸®ÅÏÇÑ´Ù.
hasChildNodes() : ÇØ´ç ¿ä¼Ò°¡ ÀÚ½Ä ¿ä¼Ò¸¦ Æ÷ÇÔÇÏ°í ÀÖ´ÂÁö¸¦ ³ªÅ¸³»´Â Boolean °ªÀ» ¸®ÅÏÇÑ´Ù.
getAttribute(name) : ƯÁ¤ÇÑ name ¿¡ ÇØ´çÇÏ´Â ¿ä¼ÒÀÇ ¼Ó¼º°ªÀ» ¸®ÅÏÇÑ´Ù.
À̹ø¿¡´Â XHR °´Ã¼ÀÇ responseXML ¼Ó¼ºÀ» ÀÌ¿ëÇÑ ¿¹Á¦¸¦ »ìÆ캽À¸·Î½á XML ´ÙÅ¥¸ÕÆ®¸¦ ´Ù·ç±â À§ÇÑ
DOM °´Ã¼ÀÇ ¼Ó¼º°ú ¸Þ¼Òµå¿¡ ´ëÇؼ­ ¾Ë¾Æº»´Ù.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Parsing XML Responses with the W3C DOM</title>
<script type="text/javascript">
var xmlHttp;
var requestType = "";
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function startRequest(requestedList) {
requestType = requestedList;
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", "parseXML.xml", true);
xmlHttp.send(null);
}
function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
if(requestType == "north") {
listNorthStates();
}
else if(requestType == "all") {
listAllStates();
}
}
}
}
function listNorthStates() {
var xmlDoc = xmlHttp.responseXML;
var northNode = xmlDoc.getElementsByTagName("north")[0];
var out = "Northern States";
var northStates = northNode.getElementsByTagName("state");
outputList("Northern States", northStates);
}
function listAllStates() {
var xmlDoc = xmlHttp.responseXML;
var allStates = xmlDoc.getElementsByTagName("state");
outputList("All States in Document", allStates);
}
function outputList(title, states) {
var out = title;
var currentState = null;
for(var i = 0; i <states.length; i++) {
currentState = states[i];
out = out + "₩n- " + currentState.childNodes[0].nodeValue;
}
alert(out);
}
</script>
</head>
<body>
<h1>Process XML Document of U.S. States</h1>
<br/><br/>
<form action="#">
<input type="button" value="View All Listed States" onclick="startRequest('all');"/>
<br/><br/>
<input type="button" value="View All Listed Northern States"
onclick="startRequest('north');"/>
</form>
</body>
</html>
<3-4 parseXML.html ÀÇ ³»¿ë>
<?xml version="1.0" encoding="UTF-8"?>
<states>
<north>
<state>Minnesota</state>
<state>Iowa</state>
<state>North Dakota</state>
</north>
<south>
<state>Texas</state>
<state>Oklahoma</state>
<state>Louisiana</state>
</south>
<east>
<state>New York</state>
<state>North Carolina</state>
<state>Massachusetts</state>
</east>
<west>
<state>California</state>
<state>Oregon</state>
<state>Nevada</state>
</west>
</states>
<3-5 parseXML.xml ÀÇ ³»¿ë>
ÀÏ´Ü <3-4>ÀÇ ½ÇÇà°á°ú¸¦ »ìÆ캻 ÈÄ Çٽɿø¸®¸¦ ÆľÇÇØ º¸ÀÚ
<3-6 parseXML.html À» ½ÇÇàÇßÀ»¶§ÀÇ ±×¸²>
±×¸² <3-6> Àº parseXML.html À» ½ÇÇàÇßÀ» ¶§ÀÇ È­¸éÀ¸·Î View All Listed States ¹öÆ°À» ´­·¶À»¶§ÀÇ
°á°ú ¹× View All Listed Northern States ¹öÆ°À» ´­·¶À»¶§ÀÇ °á°ú È­¸éÀ» ¾Æ·¡¿¡ Ç¥½ÃÇÏ¿´´Ù.
<3-7 View All Listed States ¹öÆ°À» ´­·¶À»¶§ÀÇ °á°ú È­¸é>
<3-8 View All Listed Northern States ¹öÆ°À» ´­·¶À»¶§ÀÇ °á°ú È­¸é>
¿¹Á¦ 3-4 ´Â ´Ù¼Ò ±æ¾îº¸À̳ª XHR °´Ã¼ÀÇ responseXML ¼Ó¼ºÀ» ÀÌ¿ëÇÑ DOM °´Ã¼¸¦ ´Ù·ç´Â ¼Ó¼º ¹× ¸Þ
¼Òµå¸¦ ´Ù·ç°í ÀÖ´Ù´Â ¸é¿¡¼­ ¹Ýµå½Ã ÀÌÇØÇÏ°í ³Ñ¾î°¡¾ß¸¸ ÇÑ´Ù. ¼Ò½º ÆÐÅÏÀº Áö±Ý±îÁöÀÇ ¿¹Á¦¿Í ºñ½ÁÇϹÇ
·Î DOM ¼Ó¼º ¹× ¸Þ¼Òµå°¡ »ç¿ëµÈ ÁÖ¿ä ºÎºÐ¸¸ ¼³¸íÇÏ°Ú´Ù.
listAllStates() ¸Þ¼ÒµåÀÇ ¾Æ·¡ ¶óÀÎÀ» ÁÖ¸ñÇØ º¸ÀÚ.
var xmlDoc = xmlHttp.responseXML;
=> XHR °´Ã¼´Â responseXML ¼Ó¼ºÀ» ÀÌ¿ëÇؼ­ ¼­¹ö·ÎºÎÅÍÀÇ XML °á°ú ´ÙÅ¥¸ÕÆ®¸¦ ´Ù·ê¼ö ÀÖ´Â DOM
¼Ó¼º ¹× ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁشٴ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.
var allStates = xmlDoc.getElementsByTagName("state");
=>XML °á°ú ´ÙÅ¥¸ÕÆ®·ÎºÎÅÍ state ÀÚ½Ä ¿¤¸®¸ÕÆ®µé·Î ±¸¼ºµÈ ¹è¿­À» ¾ò¾î¿Í allStates º¯¼ö¿¡ ÇÒ´çÇÏ´Â
·ÎÁ÷ÀÌ´Ù.
listNorthStates() ¸Þ¼Òµå¸¦ »ìÆ캸ÀÚ.
var northNode = xmlDoc.getElementsByTagName("north")[0];
=> XML ´ÙÅ¥¸ÕÆ®¿¡¼­ north ¾Ù¸®¸ÕÆ®´Â À¯ÀÏÇÏ°Ô Çϳª¸¸ Á¸ÀçÇϹǷΠÀÚ½Ä ¾Ù¸®¸ÕÆ®·Î ±¸¼ºµÈ ¹è¿­Áß¿¡¼­
ù¹ø°(0) ¹è¿­°ªÀ» ¾ò¾î¿Í¾ß ÇÑ´Ù. À§ ½ÄÀº ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤Çصµ °á°ú´Â °°´Ù.
var northNode = xmlDoc.getElementsByTagName("north").item(0);
outputList() ¸Þ¼Òµå¸¦ »ìÆ캸ÀÚ.
out = out + "₩n- " + currentState.childNodes[0].nodeValue;
=> À̺κÐÀº °¢°¢ÀÇ state ¾Ù¸®¸ÕÆ®ÀÇ Ã¹¹ø° ÀÚ½Ä ³ëµåÀÇ °ªÀ» out º¯¼ö¿¡ °è¼Ó ¿¬°áÇÏ´Â ºÎºÐÀÌ´Ù.
state ¾Ù¸®¸ÕÆ®ÀÇ °ªÀ» Ç¥ÇöÇÏ°í ÀÖ´Â ºÎºÐµµ XML ¿¡¼­´Â ÇϳªÀÇ text ¿¤¸®¸ÕÆ®ÀÌ´Ù. µû¶ó¼­ °¢°¢ÀÇ
state ¿¤¸®¸ÕÆ®ÀÇ Ã¹¹ø° text ÀÚ½Ä ¿¤¸®¸ÕÆ®¸¦ childNodes[0] À¸·Î Ç¥½ÃÇÑ °ÍÀÌ¸ç ±× °ªÀ» °¡Á®¿À±â À§
Çؼ­ nodeValue ¼Ó¼ºÀÌ »ç¿ëµÈ °ÍÀÌ´Ù. nodeValue ´Â ¾Æ·¡¿Í °°ÀÌ data ¼Ó¼ºÀ» »ç¿ëÇصµ °°Àº °á°ú¸¦ ¾ò
´Â´Ù.
out = out + "₩n- " + currentState.childNodes[0].data;

Ãâó: http://uip80.tistory.com/entry/¼­¹ö¿Í-Åë½ÅÇϱâ¿äûÀÀ´ä-ó¸®?category=199706 [¿©¸íÀÇÁý]