데이터를 전송하는 방식 중에 하나인 xml에 대해 학습합니다.
- e X tensible M arkup L anguage의 약자로 확장 가능한 마크업 언어라는 뜻을 갖는다.
- json 과 같이 데이터를 관리하는 목적으로 사용된다.
- 프레임워크 등의 초기 세팅을 하는데 사용된다.
- 사용자가 정의한 태그를 통해 데이터를 정의할 수 있다.
xml의 사용
- client는 사용자가 원하는 요청을 서버에 보낸다. (검색, 이동 등)
- 서버는 client의 요청을 처리하고 client에게 결과를 응답한다.
- 이때, 요청에 대한 응답을 xml 또는 json의 형태로 만들어 넘긴다.
- client는 전달 받은 xml 또는 json 조합하여 사용자가 보기 편하도록 후처리를 한다.
Get Started
- xml의 사용법은 굉장히 간단하다.
- html처럼 열고 닫는 태그 안에 값을 써주면 된다.
- 하지만 태그의 이름, 속성 등을 원하는대로 지정할 수 있다.
- 데이터를 추출할 때 해당 태그 이름으로 값을 가져올 수 있다.
<name>홍길동</name>
<age>26</age>
<address>서울시</address>
<name>Parker</name>
<age>22</age>
<address>충주시</address>
예제
- xml파일로 부터 xml을 읽어들여 html태그에 파싱하는 방법을 제시한다.
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p id="demo">
<script type="text/javascript">
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
/* myFunc(this); */
// nodeFunc(this);
dataFunc(this);
}
};
xhttp.open("GET", "sample2.xml", true);
xhttp.send();
// 값 전부 가져오기
function myFunc(xml) {
var x, i, txt, xmlDoc;
xmlDoc = xml.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName('number');
for (i = 0; i < x.length; i++) {
txt += x[i].childNodes[0].nodeValue + "<br>"
}
document.getElementById('demo').innerHTML = txt;
}
// node 전부 가져오기
function nodeFunc(xml) {
var x, i, xmlDoc, txt;
xmlDoc = xml.responseXML;
txt = "";
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length; i++) {
if (x[i].nodeType == 1) {
txt += x[i].nodeName + "<br>"
}
}
document.getElementById('demo').innerHTML = txt;
}
// 데이터를 가져오는 방법
function dataFunc(xml) {
var x, i, xmlDoc, txt;
xmlDoc = xml.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName('client')[0];
var xlen = x.childNodes.length;
y = x.firstChild;
for (var i = 0; i < xlen; i++) {
if(y.nodeType == 1){
txt += i + " " + y.nodeName + "<br>";
}
y = y.nextSibling;
}
document.getElementById('demo').innerHTML = txt;
}
</script>
</body>
</html>
sample2.xml
<?xml version="1.0" encoding="UTF-8"?>
<clients>
<client job="요리사">
<number>1</number>
<name>홍길동</name>
<address>서울시</address>
<visit>2012/12/01</visit>
</client>
<client job="운전사">
<number>2</number>
<name>일지매</name>
<address>부산시</address>
<visit>2013/12/02</visit>
</client>
<client job="프로그래머">
<number>3</number>
<name>임꺽정</name>
<address>대구시</address>
<visit>2014/12/01</visit>
</client>
</clients>
Comments