2013년 8월 13일 화요일

ASP와 XML을 이용한 초 미니사이트 구축하기

----------------
필요한 파일들
----------------


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)  


main.asp (메인)
book.asp
book_table.xsl
book_desc.xsl
book.css
default.gif
book.xml
asptest4.html, asptest4.asp, asptest4.xml, asptest4.css, 
      result.xml(이 파일은 미리 만들어둔다.)
asptest5.asp asptest5.xsl, asptest5-1.xsl, asptest5.xml

같은 book.xml을 이용하여 다른 XSL을 통해 
table형태와 description형태로 도서 목록을 나열하며
설문조사, 연락처변경하기 등을 ASP와 XML을 이용하여
구현한 예제 입니다...




------------
main.asp
------------
<html><head><title>ASP & XMLL 예제</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr"></head>
<body><table>
<tr valign="top"> 
  <td width="163" bgcolor="#006699"> 
    <table width="864" border="0" cellspacing="0" cellpadding="0" height="455">
      <tr valign="top"> 
        <td width="165" height="53">
<img src="http://www.oraclejava.co.kr/images/owd.gif" width="164" height="69"></td>
        <td width="699" height="53" bgcolor="#000000" align="center" valign="middle">
<font size="+4" color="#FFFF00">ASP와  XML을 이용한 예제</font></td></tr>
      <tr valign="top"> 
        <td width="165" height="558" bgcolor="#000000"> 
          <p> </p>
          <p><a href="main.asp?Type=Table"><font color="#99FF00">* 
            Table 형태</font></a></font></p>
          <p><a href="main.asp?Type=Desc"><font color="#99FF00">* 
            Description 형태</font></a></font></p>
          <p><a href="asptest4.html" target=_blank><font color="#99FF00">* 설문조사</a></font></p>
  <p><a href="asptest5.asp" target=_blank><font color="#99FF00">* 
  연락처 정보 변경예제</a></font></p>
        </td>
        <td width="699" height="558">
<iframe src=book.asp?Type=<%=request("Type")%> width="699" height="558"></iframe>
        </td>
      </tr>
    </table>  </td> </tr></table></body></html>


------------
book.asp
------------
<%@ language=VBScript %>
<%
 Dim myType
 
 myType = request("Type")
response.write "<?xml version='1.0' encoding='euc-kr' ?>" & chr(13)

 if myType = "Table" then
 response.write "<?xml-stylesheet type='text/xsl' href='book_table.xsl'?>"
 else
 response.write "<?xml-stylesheet type='text/xsl' href='book_desc.xsl'?>"
 end if
 response.write chr(13)
%>
<!-- #include file="book.xml" -->



------------
book.css
-------------
body {
background:#FFffFF;
}
h1 {
font-size:14pt;
font-weight:bold;
}

th {
font-size:10pt;
font-weight:bold;
background:#00ccff;
line-height:150%;
}
td {
font-size:9pt;
font-weight:normal;
background:#ffffcc;
line-height:150%;
}

-------------
book.xml
-------------
<books>
<book isbn="89-314-1826-5">
<name>Oracle정복</name>
<publisher>영진.com</publisher>
<price>15000</price>
<url>http://www.oraclejava.co.kr</url>
<published>2002.09.01</published>
<desc>
<keyword>XML</keyword>
이번기회에 Oracle을 완전히 정복합시다~ 여러분,, 
기회는 자주 오는것이 아닙니다.
<ref url="http://www.Oraclejava.co.kr">Oracle교육사이트</ref>에 가시면 
다양한 예제들을 보실수 있습니다.

from jclee...
</desc>
</book>
<book isbn="02-3143-1826-7">
<name>Visual Basic 정복하기</name>
<publisher>삼양사</publisher>
<price>12000</price>
<url>http://www.microsoft.co.kr</url>
<published>2002.10.01</published>
<desc>
<keyword>VB</keyword>
VB는 상당히 Powerful한 언어입니다...
꾸준히,,, 공부하세요.

from jclee...
</desc>
</book>
<book isbn="02-3143-1826-8">
<name>MobileJava</name>
<publisher>영진.com</publisher>
<price>15000</price>
<url>http://www.mobilejava.co.kr</url>
<published>2002.09.01</published>
<desc>
<keyword>Mobie Java</keyword>
Wireless는 향후 대세 입니다... 
어떤 환경이 되었든 공부해 두시면 좋을것 같습니다.
<ref url="http://www.mobilejava.co.kr">MobileJava 사이트</ref>에 가시면 
            기초부터 차근차근 접근할수 있는 예제들이 있습니다.

from jclee...
</desc>
</book>
</books>


--------------
book_desc.xsl
--------------
<?xml version="1.0" encoding="euc-kr" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="4.0" encoding="euc-kr"/>
<xsl:attribute-set name="imageSize">
<xsl:attribute name="width">120</xsl:attribute>
<xsl:attribute name="height">120</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="/">
<html>
<head>
<title>
<xsl:text disable-output-escaping="no">상세정보</xsl:text>
</title>
<link rel="stylesheet" type="text/css" href="book2.css"/>
</head>
<body>
<xsl:apply-templates select="books"/>
</body>
</html>
</xsl:template>
<xsl:template match="books">
<xsl:for-each select="book">
<xsl:sort select="date" data-type="text" order="descending"/>
<table border="0">
<tr><td>
<a>
<xsl:attribute name="href"><xsl:value-of select="url"/>
</xsl:attribute>
<img xsl:use-attribute-sets="imageSize">
<xsl:attribute name="src">
<xsl:choose>
<xsl:when test="image"><xsl:value-of select="image"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>default.gif</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</img>
</a>
</td>
<td valign="bottom">
<dl><dt>
<xsl:number value="position()" format="1. "/>
<xsl:value-of select="name" />
    </dt>
<dd><xsl:apply-templates select="desc"/></dd>
</dl>
</td></tr></table> <hr/>
</xsl:for-each>
</xsl:template>

<xsl:template match="ref">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="@url"/>
</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="keyword">
<span style="font-weight:bold;">
<xsl:value-of select="."/>
</span>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>


------------------
book_table.xsl
------------------
<?xml version="1.0" encoding="euc-kr"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="4.0" encoding="euc-kr"/>
<xsl:decimal-format NaN = "미정" />
<xsl:template match="/">
<html><head>
<link rel="stylesheet" type="text/css" href="book.css"/>
</head>
<h1>도서목록</h1>
<table border="1">
<tr>
<th>No.</th>
<th>ISBN Code</th>
<th>도서명</th>
<th>출판사</th>
<th>가격</th>
<th>발행일</th>
</tr>
<xsl:apply-templates select="books"/>
</table>
</html>
</xsl:template>
<xsl:template match="books">
<xsl:for-each select="book">
<xsl:sort select="date" data-type="text" order="descending"/>
<xsl:sort select="price" data-type="number" order="ascending"/>
<tr>
<td>
<xsl:number value="position()" format="i"/>
</td>
<td>
<xsl:value-of select="@isbn"/>
</td>
<td>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="url"/>
</xsl:attribute>
<xsl:value-of select="name"/>
</xsl:element>
</td>
<td>
<xsl:value-of select="publisher"/>
</td>
<td>
<xsl:value-of select="format-number(price, '0,000')"/>
<xsl:if test="price[. != '']">원</xsl:if>
</td>
<td>
<xsl:value-of select="published"/>
</td>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>



-----------------------
asptest4.html
-----------------------
<html>
<head> <title>설문조사</title></head>
<body>
 <form action="asptest4.asp" method="post">
  <h3>당신의 소중한 의견을 적어주세요~</h3><hr>
  XML강의시 좋았던 부분: <br>
  <textarea align=left cols="60" rows="10" id="firstName" name="좋았던점">
  </textarea><br><br>
  XML강의시 아쉬웠던 부분: <br>
  <textarea align=left cols="60" rows="10"  id="lastName" name="아쉬웠던점">
  </textarea><br><br>
  연락처: <input type="text" id="phone" name="연락처"><br><br>
  메일: <input type="text" id="email" name="메일"><br><br>
  <input type="submit" id="btnSub" name="btnSub" value="Send"><br><br>
 </form>
</body>
</html>

-----------------
asptest4.asp
-----------------
<%
'------------------------------------------
Function ConvertFormtoXML(strXMLFilePath, strFileName)
 Dim objDom, rootElement, objChild, objField, x

 'Microsoft XMLDOM을 초기화
 Set objDom = server.CreateObject("Microsoft.XMLDOM") 
 objDom.async=false
 objDom.load Server.MapPath("result.xml")
 Set rootElement = objDom.documentElement

 Set objChild= objDom.createElement("설문내용")
 rootElement.appendChild objChild

Set objField = objDom.createElement("번호")
 objField.Text = rootElement.ChildNodes.Length
    objChild.appendChild objField


Set objField = objDom.createElement("작성일시")
 objField.Text = now
    objChild.appendChild objField

 'Request Object의 컬렉션에서 루프를 돌자
 For x = 1 To Request.Form.Count
  If instr(1,Request.Form.Key(x),"btn") = 0 Then
  'html에서 넘어오는 값의 name으로 요소를 하나 만든다.
  Set objField = objDom.createElement(Request.Form.Key(x))

'html에서 넘어오는 값을 XML Tag의 Content로 저장
  objField.Text = Request.Form(x)

  '<설문내용>이라는 루트요소에 요소를 추가
  objChild.appendChild objField
  End If
 Next 

 'XML document를 저장하자...
 objDom.save strXMLFilePath & strFileName

 '참조를 Release 
 Set objDom = Nothing
 Set rootElement = Nothing
 Set objField = Nothing
 Set objChild = Nothing

End Function
'----------------------------------

'Function Call
ConvertFormtoXML "c:\inetpub\wwwroot","result.xml"

If err.number <> 0 then
 Response.write("Errors occurred while saving your form submission.")
 response.write err.description
Else
 Response.write("Your form submission has been saved.")
End If
%>

--------------
asptest4.xsl
--------------
<?xml version="1.0" encoding="euc-kr" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="4.0" encoding="euc-kr" />
<xsl:template match="/">
<html><head>
<title><xsl:text>설문목록</xsl:text></title>
<link rel="stylesheet" type="text/css" href="asptest4.css" /></head>
<h1><xsl:text>설문목록</xsl:text></h1>
<table border="1">
<tr><th>번호</th><th>작성일시</th><th>좋았던점</th> <th>아쉬운점</th>
      <th>연락처</th> <th>메일주소</th></tr>
<xsl:apply-templates select="설문리스트" />
</table>
</html>
</xsl:template>


<xsl:template match="설문리스트">
<xsl:for-each select="설문내용">
<xsl:sort select="작성일시" data-type="text" order="descending" />
<tr>
<td><xsl:value-of select="번호"/></td>
<td><xsl:value-of select="작성일시"/></td> 
<td><xsl:value-of select="좋았던점"/></td>
<td><xsl:value-of select="아쉬웠던점"/></td>
<td><xsl:value-of select="연락처"/></td>
<td><xsl:value-of select="메일"/></td>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


------------------
asptest4.css
------------------
body{background:#FFffFF;}
h1{font-size:14pt;font-weight:bold;}
th{font-size:10pt;font-weight:bold;background:#00ccff;line-height:150%;}
td{font-size:9pt;font-weight:normal;background:#ffffcc;line-height:150%;}


-------------------
result.xml
-------------------
<?xml version="1.0" encoding="euc-kr"?>
<?xml-stylesheet type="text/xsl" href="asptest4.xsl" ?>
<설문리스트>
</설문리스트>




-----------------
asptest5.xml
-----------------
<?xml version="1.0" encoding="euc-kr"?>
<연락처>
<field id="이름" taborder="1">
<field_value>이종철</field_value>
</field>
<field id="나이" taborder="2">
<field_value>35</field_value>
</field>
<field id="주소1" taborder="3">
<field_value>경기도 수원시 장안구 조원동</field_value>
</field>
<field id="주소2" taborder="4">
<field_value>벽산A</field_value>
</field>
<field id="phone" taborder="5">
<field_value>016-766-5919</field_value>
</field>
<field id="E-Mail" taborder="6">
<field_value>mylife688@hanmail.net</field_value>
</field>
</연락처>

-------------
asptest5.xsl
-------------
<?xml version="1.0" encoding="euc-kr"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
 <xsl:template match="/">
 <html>
 <body>
 <form method="post" action="asptest5.asp">
 <h1>연락처</h1>
 <table border="1" cellpadding="2">
 <xsl:for-each select="연락처/field">
  <tr>
  <td>
<xsl:value-of select="@id"/>
  </td>
  <td>
  <input type="text"> 
<xsl:attribute name="id"> 
<xsl:value-of select="@id" /> 
</xsl:attribute> 
<xsl:attribute name="name">
<xsl:value-of select="@id" />
 </xsl:attribute> 
 <xsl:attribute name="value">
  <xsl:value-of select="field_value" /> 
  </xsl:attribute>
  </input> 
  </td>
  </tr>
 </xsl:for-each>
 </table>
 <br/>
 <input type="submit" id="btnSubmit" name="btnSubmit“
                      value="변경하기" />
 </form>
 </body>
 </html>
 </xsl:template>
</xsl:stylesheet>


--------------
asptest5-1.xsl
---------------
<?xml version="1.0" encoding="euc-kr"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
 <xsl:template match="/">
 <html> <body>
 <h1>변경된 연락처 정보:</h1>
 <table border="1" cellpadding="2">
 <xsl:for-each select="연락처/field">
  <tr>
  <td>
  <xsl:value-of select="@id" />
  </td>
  <td>
  <xsl:value-of select="field_value" />
  </td>
  </tr>
 </xsl:for-each>
 </table> <br/>
 <input type="button" onClick="javascript:self.close();" value="닫기"/>
 </body> </html>
 </xsl:template>
</xsl:stylesheet>


----------------
asptest5.asp
----------------
<%
Function loadXMLFile(strXMLFile, strXSLFile)
 Dim objXML, objXSL
 set objXML = Server.CreateObject("Microsoft.XMLDOM")
 objXML.async = false
 objXML.load(strXMLFile)

 set objXSL = Server.CreateObject("Microsoft.XMLDOM")
 objXSL.async = false
 objXSL.load(strXSLFile)

'XML문서와 XSL문서를 대응시킴
 Response.Write(objXML.transformNode(objXSL))
End Function

Function updateXML(strXMLFile)
 Dim objDom, objRoot, objField, x
 set objDOM = Server.CreateObject("Microsoft.XMLDOM")
 objDOM.async = false
 objDOM.load strXMLFile
 Set objRoot = objDom.documentElement
For x = 1 to Request.Form.Count
  If instr(1,Request.Form.Key(x),"btn") = 0 Then   
  Set objField = objRoot.selectSingleNode("field[@id='" & _
Request.Form.Key(x) & "']/field_value")
  objField.Text = Request.Form(x)
  End If
 Next

 objDom.save strXMLFile
 Set objDom = Nothing
 Set objRoot = Nothing
 Set objField = Nothing

 loadXMLFile strXMLFile,server.MapPath("asptest5-1.xsl")
End Function

If Request("btnSubmit") = "" Then
  loadXMLFile server.MapPath("asptest5.xml"), server.MapPath("asptest5.xsl")
Else
  updateXML server.MapPath("asptest5.xml")
End If
%> 



댓글 없음:

댓글 쓰기