최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

ajax로 xml 파싱하기


먼저 xml의 구조는 아래와 같다.


news.xml




	
	
		_blank
		http://daum.com
		
	
	
	
		_blank
		http://google.com
		
	
	
	
		_blank
		http://serpiko.tistory.com
		
	
	
	
		_blank
		http://bing.com
		
	
	
	

jQuery에서 ajax메서드를 사용하여 아래와 같이 XMLHttpRequest를 사용한 파싱이 가능하다.

<!DOCTYPE HTML>
<html lang="ko">
<head>
<title> NewDocument </title>
<meta charset="utf-8">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript" src="XMLLoader.js"></script>
<script>
    var _xml;
    var _arrTarget = [];
    var _arrLink = [];
    var _arrDesc = [];
</script>
</head>
<body>
    <script>
        $(document).ready(function(){
            init();
        });
 
        function init()
        {
	    jQuery.ajax({
		dataType:"xml",
	                url:"xml/news.xml",
		success:function(data){
		    load(data);
		},
		complete:function(){
		    //alert("complete");
		},
		error:function(xhr,status){
		    console.log(xhr, status);
		}
	    });
        }
 
        function load($xml)
        {
            _xml = $($xml).find("xml");
            var len = _xml.find("news").length;
            for(var i=0; i<len; ++i)
            {
                _arrTarget[i] = _xml.find("news").eq(i).find("target").text();
                _arrLink[i] = _xml.find("news").eq(i).find("link").text();
                _arrDesc[i] = _xml.find("news").eq(i).find("name").text();
                $("body").append(_arrTarget[i]).append(_arrLink[i]).append(_arrDesc[i]).append("<br />");
                 
            }
        }
    </script>
</body>
</html>


결과)




위에서 사용한 ajax XML을 XMLLoader.js로 라이브러리화 시키면 아래와 같다.


(직접만든것은 아니고 과장님이)


/****************************************************************
 * title : 
 * author : Song-Hyun, Kim (shk@pulipinc.com)
 * last update : 2011.04.26
 * comment :"";
 * use : 
 * XMLLoader.url = "http://localhost/xml/gnb/gnb.xml";
   XMLLoader.complete = load;
   XMLLoader.error = errorHandler;
   XMLLoader.init();
 ****************************************************************/
var XMLLoader = {}
	XMLLoader.init = init;
	
	XMLLoader.xmlLoad = xmlLoad;
	XMLLoader.complete = null;
	XMLLoader.error = null;
	XMLLoader.url = "";
	XMLLoader.type = "xml";

	/****************************************************************
	 * init
	 ****************************************************************/
	function init() 
	{
		xmlLoad();
	};

	/****************************************************************
	 * load
	 ****************************************************************/
	function xmlLoad() 
	{
		//alert("load");
		jQuery.ajax({ 
				
			type:"GET", 
			dataType:XMLLoader.type,
			url:XMLLoader.url, 
			success: function(data){
				XMLLoader.complete(data);
			},
			complete: function() {
				//alert("complete");
			},
			error: function(xhr, status) {
				XMLLoader.error(xhr, status)
			}
		});
	}


사용할때에는 XMLLoader.js의 오브젝트트들을 참조하여 경로와 함수만 대입하여 참조 시켜주면 된다.

<!DOCTYPE HTML>
<html lang="ko">
<head>
<title> NewDocument </title>
<meta charset="utf-8">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript" src="XMLLoader.js"></script>
<script>
	var _xml;
	var _arrTarget = [];
	var _arrLink = [];
	var _arrDesc = [];
</script>
</head>
<body>
	<script>
		$(document).ready(function(){
			init();
		});

		function init()
		{
			XMLLoader.url = "xml/news.xml";
			XMLLoader.complete = load;
			XMLLoader.error = errorHandler;
			XMLLoader.init();
		}

		function load($xml)
		{
			_xml = $($xml).find("xml");
			var len = _xml.find("news").length;
			for(var i=0; i<len; ++i)
			{
				_arrTarget[i] = _xml.find("news").eq(i).find("target").text();
				_arrLink[i] = _xml.find("news").eq(i).find("link").text();
				_arrDesc[i] = _xml.find("news").eq(i).find("name").text();
				$("body").append(_arrTarget[i]).append(_arrLink[i]).append(_arrDesc[i]).append("<br />");
				
			}
		}

		function errorHandler(xhr, status)
		{
			console.log(xhr, status);
		}
	</script>
</body>
</html>

결과는 동일하다)





댓글