아는 것이 좋은 것이다.

[ASP] 클래스로 xml 생성 본문

ASP

[ASP] 클래스로 xml 생성

start0 2014. 4. 24. 22:26

 

xmlTest.asp

 

<%
Class XmlLib
 '==================================================================
 ' 변수 선언
 '==================================================================
 Private XML_HEADER  ' xml 헤더
 Private m_parent_node ' parent node
 Private t_parent_node ' 최상위 node
 Private m_node_names ' child node 이름
 Private m_node_values ' child node 값
 
 '==================================================================
 ' getter/setter
 '==================================================================
 '-----------------------------------
 ' child node 이름 정보 반환
 '-----------------------------------
 Public Property Get getNode()
  getNode = m_node_names
 End Property
 '-----------------------------------
 ' child node 값 정보 반환
 '-----------------------------------
 Public Property Get getData()
  getData = m_node_values
 End Property
 
 '-----------------------------------
 ' parent node 초기화
 '-----------------------------------
 Public Sub setInit(parent_node)
  m_parent_node = parent_node
  t_parent_node = CStr(m_parent_node)&"s"
 End Sub
 '-----------------------------------
 ' child node 이름 초기화
 '-----------------------------------
 Public Sub setNode(node_names)
  m_node_names = node_names
 End Sub
 '-----------------------------------
 ' child node 값 초기화
 '-----------------------------------
 Public Sub setData(node_values)
  if m_parent_node = "" then
   ErrMsg "setInit 프로시저를 초기화 하지 않았습니다.", "setData"
  elseif m_node_names = "" then
   ErrMsg "setNode 프로시저로 Node를 초기화 하지않았습니다.", "setData"
  else
   if m_node_values = "" then
    m_node_values = node_values
   else
    m_node_values = m_node_values&"|"&node_values
   end if
  end if
 End Sub
 
 '==================================================================
 ' class basic function and sub
 '==================================================================
 '-----------------------------------
 ' class 생성시 초기화
 '-----------------------------------
 Private Sub Class_Initialize
  XML_HEADER = "<?xml version=""1.0"" encoding=""euc-kr"" ?>"
 End Sub
 '-----------------------------------
 ' class 종료시
 '-----------------------------------
 Private Sub Class_Terminate
 End Sub
 '-----------------------------------
 ' error message를 반환하는 함수
 '-----------------------------------
 Private Sub ErrMsg(ErrDesc,fnname)
  Dim ErrM
  ErrM = "<p><font color=red><b>[오류]: "&ErrDesc&"    <br>"
  ErrM = ErrM&"    "&fnname&"()에서 오류가 발생했습니다.</b></font></p>"
  Response.Write ErrM
  Response.End
 End Sub
 
 '==================================================================
 ' xml 관련 function and sub
 '==================================================================
 '-----------------------------------
 ' xml 데이타로 뿌리기
 '-----------------------------------
 Public Function GetXmlData()
  Dim tmp_data, tmp_node, tmp_values, tmp_retval
  tmp_retval = XML_HEADER&vbCrLf
  tmp_retval = tmp_retval&GetDocType()&vbCrLf
  
  tmp_data = Split(m_node_values,"|") ' child node 데이타들을 배열로 저장
  tmp_node = Split(m_node_names,",") ' child node 이름을 배열로 저장
  For i = 0 to UBound(tmp_data)
   if i = 0 then
    tmp_retval = tmp_retval&ConvNode(t_parent_node,"o")&vbCrLf
   end if
   tmp_retval = tmp_retval&ConvNode(m_parent_node,"o")&vbCrLf
   For j = 0 to UBound(tmp_node)
    tmp_values = Split(tmp_data(i),",")
    'tmp_retval = tmp_retval&vbTab&ConvNode(tmp_node(j),"o")&tmp_values(j)&ConvNode(tmp_node(j),"c")&vbCrLf
    tmp_retval = tmp_retval&vbTab&ConvCDATA(ConvNode(tmp_node(j),"o")&tmp_values(j)&ConvNode(tmp_node(j),"c"))&vbCrLf
    'tmp_retval = tmp_retval&vbTab&ConvNode(tmp_node(j),"o")&"<ELEMENT>"&tmp_values(j)&"</ELEMENT>"&ConvNode(tmp_node(j),"c")&vbCrLf
   Next
   tmp_retval = tmp_retval&ConvNode(m_parent_node,"c")&vbCrLf
   
  Next
  tmp_retval = tmp_retval&ConvNode(t_parent_node,"c")
  GetXmlData = tmp_retval
 End Function
 Private Function GetDocType()
  Dim tmp_retval, tmp_node
  tmp_retval = "<!DOCTYPE notice ["&vbCrLf
  tmp_node = Split(m_node_names,",")
  For i = 0 to UBound(tmp_node)
   tmp_retval = tmp_retval&"<!ELEMENT "&Trim(tmp_node(i))&" (#PCDATA)>"&vbCrLf
  Next
  tmp_retval = tmp_retval&"]>"
  GetDocType = tmp_retval
 End Function
 
 '-----------------------------------
 ' xml 위한 페이지 헤더
 '-----------------------------------
 Public Sub OutXml
  Response.Buffer = TRUE
  Response.ContentType = "text/xml"
 End Sub
 
 '==================================================================
 ' general function and sub
 '==================================================================
 '-----------------------------------
 ' node를 <> 태그로 감싸주는 함수
 '-----------------------------------
 Private Function ConvNode(v,f)
  v = Trim(v)
  if f = "o" then
   ConvNode = "<"&v&">"
  elseif f = "c" then
   ConvNode = "</"&v&">"
  else
   ErrMsg "flag는 o, c 로만 지정해야합니다..", "ConvNode"
  end if
 End Function
 '-----------------------------------
 ' element를 cdata로바꿔줌
 '-----------------------------------
 Private Function ConvCDATA(v)
  ConvCDATA = "<![CDATA["&v&"]]>"
 End Function
 Private Function ConvStr(v)
  v = Replace(v,"&","&")
  v = Replace(v,"<","<")
  v = Replace(v,">",">")
  'v = Replace(v,"""","(")
  ConvStr = v
 End Function
End Class
 
Set x = New XmlLib
x.setInit "notice"
x.setNode "title, data, content, link"
x.setData "제목입니다,2004.02.03,<a href='http://www.empas.com'>내용입니다</a>,링크라네요"
x.setData "제목입니다1111,2004.02.03&,<내용입니다111,링크라네요11"
x.setData "제목입니다1111,2004.02.03,내용입니다111,링크라네요11"
 
x.OutXml
Response.Write x.GetXmlData()
%>


Comments