¼¹ö¿Í Åë½ÅÇϱâ(¿äû/ÀÀ´ä ó¸®
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 [¿©¸íÀÇÁý]