<%@ page contentType="text/html;charset=EUC-KR" %>
<% request.setCharacterEncoding("euc-kr"); %>
<%@ page import="java.util.*" %>
<%@ page import="java.net.*" %>
<%@ page import="javax.xml.parsers.*" %>
<%@ page import="org.w3c.dom.*" %>
<%!
final String G_ROOT_URL="http://locahost:6973/test.cgi?";
final String strVal(String str){
if(str == null) str = "";
return str.trim();
}
class T_DOC{
String id;
String sim;
HashMap<String,String> hm_item=new HashMap<String,String>();
}
class SrchInfo{
StringBuffer m_URL=new StringBuffer();
SrchInfo(){
m_URL.append(G_ROOT_URL);
}
public void SetQRY(String p_name,String p_value){
m_URL.append(p_name + "=" + p_value + "&");
}
// 헤더 정보 변수
String m_section_name;
String m_usrspec;
String m_idxname;
String m_qryflag;
String m_srtflag;
String m_totcnt;
String m_maxcnt;
String m_outcnt;
String m_pagenum;
// 결과 정보
ArrayList<T_DOC> m_DOCS=new ArrayList<T_DOC>();
private DocumentBuilderFactory docBuilderFactory;
private DocumentBuilder docBuilder;
private Document doc;
private NodeList nodeDOC;
public void GetData(){
try{
// DocumentBuilderFactory 의 객체 생성
DocumentBuilderFactory docBuilderFactory=DocumentBuilderFactory.newInstance();
// factory로부터 DocumentBuilder 를 얻어온다.
DocumentBuilder docBuilder=docBuilderFactory.newDocumentBuilder();
// XML 문서로부터 DOM 객체를 만들어서 문서(Document) 로 반환 받는다.
//System.out.println(p_xmlfile);
Document doc=docBuilder.parse(m_URL.toString());
//메타 정보 추출
nodeDOC=doc.getElementsByTagName("section");
m_section_name=nodeDOC.item(0).getAttributes().getNamedItem("name").getNodeValue();
m_usrspec=nodeDOC.item(0).getChildNodes().item(1).getFirstChild().getNodeValue();
m_idxname=nodeDOC.item(0).getChildNodes().item(3).getFirstChild().getNodeValue();
m_qryflag=nodeDOC.item(0).getChildNodes().item(5).getFirstChild().getNodeValue();
m_srtflag=nodeDOC.item(0).getChildNodes().item(7).getFirstChild().getNodeValue();
m_totcnt=nodeDOC.item(0).getChildNodes().item(9).getFirstChild().getNodeValue();
m_maxcnt=nodeDOC.item(0).getChildNodes().item(11).getFirstChild().getNodeValue();
m_outcnt=nodeDOC.item(0).getChildNodes().item(13).getFirstChild().getNodeValue();
m_pagenum=nodeDOC.item(0).getChildNodes().item(15).getFirstChild().getNodeValue();
int count=Integer.parseInt(m_outcnt);
for ( int i=0 , idx=19; i < count ; i++ , idx+=2 ){
T_DOC tmp_doc=new T_DOC();
tmp_doc.id=nodeDOC.item(0).getChildNodes().item(idx).getAttributes().getNamedItem("id").getNodeValue();
tmp_doc.sim=nodeDOC.item(0).getChildNodes().item(idx).getAttributes().getNamedItem("sim").getNodeValue();
int child_cnt=nodeDOC.item(0).getChildNodes().item(idx).getChildNodes().getLength();
for ( int j = 1 ; j < child_cnt ; j+=2 ) {
String tag=nodeDOC.item(0).getChildNodes().item(idx).getChildNodes().item(j).getAttributes().getNamedItem("name").getNodeValue();
String value=nodeDOC.item(0).getChildNodes().item(idx).getChildNodes().item(j).getFirstChild().getNodeValue();
tmp_doc.hm_item.put(tag,value);
}
m_DOCS.add(tmp_doc);
}
}catch(java.lang.Exception e) {
System.err.println("==GetData()]"+ e.toString());
e.printStackTrace(System.out);
// System.exit(-1);
}
}// end of GetHeader
public void GetResults(){
}
}//end of class
%>
==================== index.jsp ===========================================
실제 사용 샘플 페이지
<%-- xml parse fs 2008 07 --%>
<%@ page contentType="text/html;charset=EUC-KR" %>
<% request.setCharacterEncoding("euc-kr"); %>
<%@ include file="common.jsp" %>
<%
SrchInfo OB_SrchInfo=new SrchInfo();
OB_SrchInfo.SetQRY("w","test");
String qry=strVal(request.getParameter("qry"));
if( qry.length() == 0 ) qry="*";
OB_SrchInfo.SetQRY("q",URLEncoder.encode(qry));
// xml 파서 시작
OB_SrchInfo.GetData();
out.println("<xmp> " + OB_SrchInfo.m_URL + "</xmp>" );
%>
<HEAD>
<TITLE>XML JAVA 파서 샘플 페이지</TITLE>
</HEAD>
<BODY>
<P>
<table>
<form name=form action=index.jsp method=get>
검색어:<input type=text name=qry value=<%= qry %>>
<input type=submit value="검색">
</form>
</table>
<검색 결과 헤더 정보> : <br>
- 전체건수: <%= OB_SrchInfo.m_totcnt %> <br>
- 요청건수(outmax값): <%= OB_SrchInfo.m_maxcnt %> <br>
- 출력건수: <%= OB_SrchInfo.m_outcnt %> <br>
- 출력페이지번호: <%= OB_SrchInfo.m_pagenum %> <br>
<p>
<검색 결과 데이터> :
<p>
<%
for(int i=0; i < OB_SrchInfo.m_DOCS.size() ; i++){
T_DOC RESULT=OB_SrchInfo.m_DOCS.get(i);
out.println( "DOC ID : " + RESULT.id + "<br>");
out.println( "DOC SIM : " + RESULT.sim + "<br>");
out.println( "제목 : " + RESULT.hm_item.get("TITLE=") + "<br>");
out.println( "내용 : " + RESULT.hm_item.get("ARTICLE=") + "<p>");
}
%>
실제 활용예 소스는 아니지만 좀 아는 사람이라면
실무에 패키지해서 유용하게 사용할수도 있을것이다~~
2008 07 fs