books.xml
태그를 이용한다.
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>겨울왕국</title>
<author>디즈니</author>
</book>
<book>
<title>이솝우화</title>
<author>미드</author>
</book>
<book>
<title>힐러리의삶</title>
<author>클린턴</author>
</book>
<book>
<title>수지의 어린시절</title>
<author>EBS</author>
</book>
</books>
getBooksXML.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="<%=cp%>/data/js/httpRequest.js"></script>
<script type="text/javascript">
function getBookList() {
sendRequest("books.xml",null,displayBookList,"GET"); // 아쟉스는 _ok로 보냈는데 , xml은 books.xml를 만들어놔서 소스가 books.xml이다. 바로 접근가능
// null 넘어오는데이터가없고 , 콜백함수 , get방식으로 보냄
}
// 콜백함수
function displayBookList() {
if(httpRequest.readyState==4) {
if(httpRequest.status==200) {
// 전달받은 XML을 DOM객체를 넣음
var Document = httpRequest.responseXML; // XML를 반환받을때는 responseXML
//alert(Document);
// DOM 객체에서 Element추출
var booksE = Document.documentElement;
// book의 갯수 호출
var bookNL = booksE.getElementsByTagName("book"); // <book> : 태그 태그이름으로 찾는다.
//alert(bookNL.length + "개"); // books.xml에서 <book>이 4개이므로
// 전체데이터
var html = "";
html += "<ol>";
for(var i=0; i<bookNL.length;i++){ // 4 <bookNL배열
var bookE = bookNL.item(i); // var f = document.myForm 과 같은개념
// ★ ITEM은 머지
// title를 읽어낸다.겨울왕국이 0 firstChild 자식노드 값을가져옴
var titleStr = bookE
.getElementsByTagName("title")
.item(0)
.firstChild // 겨울왕국
.nodeValue;
var authorStr = bookE
.getElementsByTagName("author")
.item(0)
.firstChild // 디즈니
.nodeValue;
html += "<li>"
+ titleStr
+ " "
+ authorStr + "</li>";
}
html += "</ol>";
document.getElementById("bookDiv").innerHTML = html; // 한번에 써줄수있다.
}
}
}
window.onload = function() {
getBookList();
}
</script>
</head>
<body>
<h1 id="list">Book List</h1>
<hr/>
<div id="bookDiv" style="display: block; margin: 0 auto;"></div>
</body>
</html>
newsTitleXML_ok.jsp
( 일반적인 데이터를 xml로 읽어와서 보낸다 )
<%@page import="java.util.Date"%>
<%@page import="javax.xml.crypto.Data"%>
<%@ page contentType="text/xml; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<%!
// db에서 읽어온 데이터
String[] newsTitle = {
"[속보aaaaaaa]윤석열 부동산 정책, 집값 '대세 하락' 가속화하나",
"물가는 뛰고, 경기는 힘 빠지고…韓 경제 스태그플레이션 진입하나",
"조국사태 교훈? 尹측 靑 인사 추천만, 법무 경찰이 검증",
"'친문 전력' 김오수 어떡하나…권성동 스스로 거취 정해야",
"[강준만의 직설] '충성 경쟁'이 대통령을 망친다",
"코로나 신규확진 40만명대…정부는 감염병 등급 하향",
};
/* 위 데이터를 xml로 만들것임 */
%>
<!-- 내보내는 데이터가 xml이므로 ontentType="text/xml; 로 고침 -->
<!-- 공공데이터를 xml로 읽어와서 띄어준다. -->
<!-- result count data title 내가만들어가는 태그 -->
<result>
<count><%=newsTitle.length%></count>
<data>
<%for(int i=0;i<newsTitle.length;i++){ %>
<title><%=newsTitle[i] + "|" + new Date() %></title>
<%} %>
</data>
</result>
newsTitleXML.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="<%=cp%>/data/js/httpRequest.js"></script>
<style type="text/css">
div{
margin: auto;
border: 1px solid #0000ff;
width: 700px;
height: 70%;
padding: 10px;
}
</style>
<title>Insert title here</title>
<script type="text/javascript">
function newsTitle() {
sendRequest("newsTitleXML_ok.jsp",null,displayNewsTitle,"GET"); // 경로 , 데이터 , 콜백함수 , 방식
setTimeout("newsTitle()",3000); // 자기자신을 3초마다 호출
}
//콜백함수
function displayNewsTitle() {
if(httpRequest.readyState==4){
if(httpRequest.status==200) {
var doc = httpRequest.responseXML;
var count = doc
.getElementsByTagName("count")
.item(0)
.firstChild
.nodeValue;
if(count>0) {
var titleNL = doc.getElementsByTagName("title");
var htmlData = "<ol>";
for(var i=0;i<titleNL.length;i++) {
htmlData += "<li>"
+ titleNL.item(i).firstChild.nodeValue;
+ "</li>";
}
htmlData += "</ol>";
var newsDiv = document.getElementById("news");
newsDiv.innerHTML = htmlData;
}
}
}
}
window.onload = function() {
newsTitle();
}
</script>
</head>
<body>
<h1>실시간 뉴스</h1>
<hr/>
<div id="news"></div>
</body>
</html>
responseXML
.getElementsByTagName("count")
.item(0)
.firstChild
.nodeValue;
로 접근하여 노드 값을 가져온다.
.item(0)은 인덱스 i에 저장된 노드를 구하게 된다 ( 0부터 시작 )
'LANGUANGE > XML' 카테고리의 다른 글
[XML] 실시간 전송 / XMLhttpRequest 객체 open , send (0) | 2022.03.19 |
---|---|
[XML] XML Document Object Model 과 XML (0) | 2022.03.18 |